【问题标题】:PrintManager.print() and changed locale in attachBaseContextPrintManager.print() 并更改了 attachBaseContext 中的语言环境
【发布时间】:2019-02-12 10:54:38
【问题描述】:

我正在使用此扩展程序来更改我的应用程序的语言环境:

fun Context.changeLanguage(language: String): ContextWrapper {
    var context = this
    val config = context.resources.configuration

    if (language.isNotBlank()) {
        val locale = Locale(language)
        Locale.setDefault(locale)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            config.setLocale(locale)
        } else {
            config.locale = locale
        }
        context = context.createConfigurationContext(config)
    }
    return ContextWrapper(context)
}

主活动:

override fun attachBaseContext(newBase: Context?) {
        super.attachBaseContext(newBase?.changeLanguage(prefs.language))
}

这适用于除打印之外的所有内容。 当我尝试打印时,我得到java.lang.IllegalStateException: Can print only from an activity

另一个模块中的PrintFragment:

activity?.also { context ->
    val printManager = context.getSystemService(Context.PRINT_SERVICE) as PrintManager
    val jobName = getString(R.string.print_document)
    printManager.print(jobName, PrintPdfAdapter(context, printList), null)
}

有什么办法可以解决这个问题吗?

我现在切换回context.resources.updateConfiguration(config, context.resources.displayMetrics)。希望他们不要过早删除它。

【问题讨论】:

    标签: android kotlin android-print-framework


    【解决方案1】:

    您可以将原始上下文从fun attachBaseContext(newBase: Context?) 保存到某个MainActivity 变量中,然后在您的PrintFragment 中使用此变量进行打印。

    与此处相同:Android N: PrintManager.print() results in java.lang.IllegalStateException: Can print only from an activity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多