Android API 26安全性异常问题

Android API 26安全性异常问题,android,android-permissions,android-securityexception,Android,Android Permissions,Android Securityexception,在我的应用程序中,我有一个片段和一个imageButton。当我在我的设备(Android 8-API26)上运行应用程序并单击imageButton时,应用程序崩溃并抛出一个我以前没有看到的运行时错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.mustafa.diyetisyenadmin, PID: 26366 java.lang.SecurityExcep

在我的应用程序中,我有一个片段和一个imageButton。当我在我的设备(Android 8-API26)上运行应用程序并单击imageButton时,应用程序崩溃并抛出一个我以前没有看到的运行时错误

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.mustafa.diyetisyenadmin, PID: 26366
              java.lang.SecurityException: Permission Denial: null asks to run as user 1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
                  at android.os.Parcel.readException(Parcel.java:1945)
                  at android.os.Parcel.readException(Parcel.java:1891)
                  at android.view.autofill.IAutoFillManager$Stub$Proxy.addClient(IAutoFillManager.java:326)
                  at android.view.autofill.AutofillManager.ensureServiceClientAddedIfNeededLocked(AutofillManager.java:903)
                  at android.view.autofill.AutofillManager.notifyViewExited(AutofillManager.java:487)
                  at android.view.View.notifyEnterOrExitForAutoFillIfNeeded(View.java:6983)
                  at android.view.View.dispatchAttachedToWindow(View.java:17594)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3332)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3339)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3339)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3339)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3339)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3339)
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3339)
                  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1792)
                  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1515)
                  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7266)
                  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:981)
                  at android.view.Choreographer.doCallbacks(Choreographer.java:790)
                  at android.view.Choreographer.doFrame(Choreographer.java:721)
                  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:967)
                  at android.os.Handler.handleCallback(Handler.java:808)
                  at android.os.Handler.dispatchMessage(Handler.java:101)
                  at android.os.Looper.loop(Looper.java:166)
                  at android.app.ActivityThread.main(ActivityThread.java:7425)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

因此,我在Manifest.xml中添加了所需的权限,并尝试了主题中的所有代码,但得到了相同的错误。我已经解决了这个主题的自动填充问题,但在这个片段中,只有单击ImageButton时才会发生错误。我应该如何解决此问题?

您必须添加运行时权限。接下来要做什么

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!checkIfAlreadyhavePermission()) {
                    requestForSpecificPermission();
                }
}
模块checkIfAlreadyhavePermission()的实现方式如下:

private boolean checkIfAlreadyhavePermission() {
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.INTERACT_ACROSS_USERS_FULL);
    return result == PackageManager.PERMISSION_GRANTED;
}
private void requestForSpecificPermission() {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERACT_ACROSS_USERS_FULL}, 101);
}
模块requestForSpecificPermission()实现为:

private boolean checkIfAlreadyhavePermission() {
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.INTERACT_ACROSS_USERS_FULL);
    return result == PackageManager.PERMISSION_GRANTED;
}
private void requestForSpecificPermission() {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERACT_ACROSS_USERS_FULL}, 101);
}
并在活动中覆盖:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 101:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //DO WHATEVER YOU WANTED TO DO
            } else {
                //not granted
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

最后我找到了解决办法。由于我的活动中有一个名为getUserId()的方法返回字符串user\u id并将数据发送到片段,所以出现了问题。我更改了它的名称,现在一切正常。

谢谢您的回答。你能告诉我应该在哪里写前3个代码吗?片段或根活动?在您的片段中,我按照您的指示执行了所有操作,但当我添加Manifest.permission.INTERACT\u overs\u USERS\u FULL时,“INTERACT\u overs\u USERS\u FULL”部分为红色,并显示无法解析的符号。omg可能重复!你是我的英雄。你是怎么找到这个的?!非常感谢你!