com.samsung.android.content.clipboard.SemClipboardManager.registerClipboardEventListener + 708 (SemClipboardManager.java:708) - PullRequest
1 голос
/ 04 июля 2019

После обновления Android Pie я столкнулся с проблемой, специфичной для Samsung, только в моделях J7, J7 Neo и J7 Pro, связанных с кодом Samsung в полуклипе, и я не могу его воспроизвести.

Этой проблемы раньше не было, только после обновления Android и вот журнал:

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'java.lang.String android.content.Context.getOpPackageName()' on a null object reference
com.samsung.android.content.clipboard.SemClipboardManager.registerClipboardEventListener + 708 (SemClipboardManager.java:708)
android.widget.EditText.updateClipboardFilter + 322 (EditText.java:322)
android.widget.EditText.onFocusChanged + 262 (EditText.java:262)
android.view.View.handleFocusGainInternal + 7694 (View.java:7694)
android.view.View.requestFocusNoSearch + 12386 (View.java:12386)
android.view.View.requestFocus + 12360 (View.java:12360)
android.view.View.requestFocus + 12327 (View.java:12327)
android.view.View.requestFocus + 12269 (View.java:12269)
android.view.View.onTouchEvent + 15324 (View.java:15324)
android.widget.TextView.onTouchEvent + 11274 (TextView.java:11274)
android.view.View.dispatchTouchEvent + 13473 (View.java:13473)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
android.view.ViewGroup.dispatchTransformedTouchEvent + 3222 (ViewGroup.java:3222)
android.view.ViewGroup.dispatchTouchEvent + 2904 (ViewGroup.java:2904)
com.android.internal.policy.DecorView.superDispatchTouchEvent + 734 (DecorView.java:734)
com.android.internal.policy.PhoneWindow.superDispatchTouchEvent + 1880 (PhoneWindow.java:1880)
android.app.Activity.dispatchTouchEvent + 3489 (Activity.java:3489)
android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent + 69 (WindowCallbackWrapper.java:69)
com.android.internal.policy.DecorView.dispatchTouchEvent + 692 (DecorView.java:692)
android.view.View.dispatchPointerEvent + 13721 (View.java:13721)
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent + 6200 (ViewRootImpl.java:6200)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess + 5978 (ViewRootImpl.java:5978)
android.view.ViewRootImpl$InputStage.deliver + 5427 (ViewRootImpl.java:5427)
android.view.ViewRootImpl$InputStage.onDeliverToNext + 5480 (ViewRootImpl.java:5480)
android.view.ViewRootImpl$InputStage.forward + 5446 (ViewRootImpl.java:5446)
android.view.ViewRootImpl$AsyncInputStage.forward + 5605 (ViewRootImpl.java:5605)
android.view.ViewRootImpl$InputStage.apply + 5454 (ViewRootImpl.java:5454)
android.view.ViewRootImpl$AsyncInputStage.apply + 5662 (ViewRootImpl.java:5662)
android.view.ViewRootImpl$InputStage.deliver + 5427 (ViewRootImpl.java:5427)
android.view.ViewRootImpl$InputStage.onDeliverToNext + 5480 (ViewRootImpl.java:5480)
android.view.ViewRootImpl$InputStage.forward + 5446 (ViewRootImpl.java:5446)
android.view.ViewRootImpl$InputStage.apply + 5454 (ViewRootImpl.java:5454)
android.view.ViewRootImpl$InputStage.deliver + 5427 (ViewRootImpl.java:5427)
android.view.ViewRootImpl.deliverInputEvent + 8504 (ViewRootImpl.java:8504)
android.view.ViewRootImpl.doProcessInputEvents + 8424 (ViewRootImpl.java:8424)
android.view.ViewRootImpl.enqueueInputEvent + 8377 (ViewRootImpl.java:8377)
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent + 8619 (ViewRootImpl.java:8619)
android.view.InputEventReceiver.dispatchInputEvent + 198 (InputEventReceiver.java:198)
android.os.MessageQueue.nativePollOnce (MessageQueue.java)
android.os.MessageQueue.next + 326 (MessageQueue.java:326)
android.os.Looper.loop + 181 (Looper.java:181)
android.app.ActivityThread.main + 7156 (ActivityThread.java:7156)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 494 (RuntimeInit.java:494)
com.android.internal.os.ZygoteInit.main + 975 (ZygoteInit.java:975)

Я думаю, это может быть связано с копированием и вставкой текста. Экран, на котором он создается, представляет собой действие с паролем, которое, как предполагается, позволяет избежать этой операции.

Исключение составляет около четвертой или пятой строки этого кода

@OnClick(R.id.root_view)
public void onRootViewClick() {
    if (mInput != null) {
        mInput.setFocusableInTouchMode(true);
        mInput.requestFocus();
        InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if(inputMethodManager != null)
        inputMethodManager.showSoftInput(mInput, InputMethodManager.SHOW_IMPLICIT);
    }
}

Кто-то сталкивается с той же проблемой? Я не знаю, как воспроизвести или исправить это. У меня есть только модель Samsung J7 (2016) без поддержки Android Pie от Samsung.

1 Ответ

1 голос
/ 20 июля 2019

У меня тоже была эта проблема. В моем случае проблема заключалась в том, что однажды, когда я тестировал свое приложение с использованием Canary , я узнал об очень специфической утечке в мобильных телефонах Samsung и нашел решение для нее здесь . Итак, в моем классе Application я добавил этот код:

private final class LeakPreventionLifecycleCallbacks implements ActivityLifecycleCallbacks {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

        }

        @Override
        public void onActivityStarted(Activity activity) {

        }

        @Override
        public void onActivityResumed(Activity activity) {

        }

        @Override
        public void onActivityPaused(Activity activity) {

        }

        @Override
        public void onActivityStopped(Activity activity) {

        }

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

        }

        @Override
        public void onActivityDestroyed(Activity activity) {
            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.MANUFACTURER.equals("samsung")) {
                    Object systemService = getSystemService(Class.forName("com.samsung.android.content.clipboard.SemClipboardManager"));
                    Field mContext = systemService.getClass().getDeclaredField("mContext");
                    mContext.setAccessible(true);
                    mContext.set(systemService, null);
                }
            } catch (ClassNotFoundException e) { //ignored }

            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }


        }

    }

И теперь в Android 9 обновление мобильных телефонов J7 этот код вызывает сбой в каждом событии изменения фокуса редактирования текстов. После удаления этого обратного вызова все возвращается к нормальной жизни

...