Как исправить: Android Api 28 DisplayManager # функция getDisplays () вылетает из приложения - PullRequest
0 голосов
/ 24 июня 2019

Я хочу использовать второй дисплей в моем компактном устройстве Android с двумя экранами, он уже работает в Android API 25, но когда я пытаюсь работать с API 28, я получаю такую ​​ошибку.

Моя главная цель - проверить, существует ли дисплей, если он существует, показать на нем некоторый контент, если не сделать ничего. Но даже блок catch ловит исключение, приложение вылетает.

abstract class BaseActivity: AppCompatActivity() {

    companion object {
        const val PRESENTATION_KEY = "presentation"
        const val TAG = "BaseActivity"
    }

    private lateinit var baseApp: BaseApp
    protected var display: Display? = null
    private var presentation: BasePresentation? = null
    private var mContent: PresentationContent? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.i(TAG, "onCreate")
        baseApp = application as BaseApp

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            configureDisplay(savedInstanceState)
        }
    }

    @RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    private fun configureDisplay(savedInstanceState: Bundle?) {
        if (savedInstanceState != null) {
            mContent = savedInstanceState.getParcelable(PRESENTATION_KEY)
        }

        try {
            val displayManager = getSystemService(Context.DISPLAY_SERVICE) as? DisplayManager
            val presentationDisplays = displayManager?.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION)
            if (presentationDisplays != null && presentationDisplays.isNotEmpty()) {
                display = presentationDisplays.first()
            }
        } catch (e: Exception) {
            Log.e(TAG, e.message)
        }
    }
}

2019-06-24 19: 12: 00.392 13056-13056 / elbepos.puzzle.pos.de E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: elbepos.puzzle.pos.de, PID: 13056 java.lang.NullPointerException: попытка вызвать виртуальный метод int android.view.Display.getDisplayId () для ссылки на пустой объект на android.app.ActivityThread.performConfigurationChangedForActivity (ActivityThread.java:4876) на android.app.ActivityThread.handleActivityConfigurationChanged (ActivityThread.java:5238) на android.app.ActivityThread $ ActivityClientRecord.lambda $ init $ 0 (ActivityThread.java:458) at android.app .- $$ Лямбда $ ActivityThread $ ActivityClientRecord $ HOrG1qglSjSUHSjKBn2rXtX0gGg.onConfigurationChanged (неизвестный источник: 2) на android.view.ViewRootImpl.performConfigurationChange (ViewRootImpl.java:3899) на android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2014) на android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1460) на android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:7183) на android.view.Choreographer $ CallbackRecord.run (Хореограф.java:949) на android.view.Choreographer.doCallbacks (Хореограф.java:761) на android.view.Choreographer.doFrame (Хореограф.java:696) на android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:935) на android.os.Handler.handleCallback (Handler.java:873) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6669) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

...