当应用程序从后台删除时,权限就消失了



我正在请求在Marshmallow及以上设备上运行android应用程序的权限。权限被正确授予,但一旦我杀死了应用程序(从后台删除,而不是强制停止),权限就消失了,当你再次打开应用程序时,它会再次请求权限。

boolean granted=checkPermission();
    Log.d("Permission already there","---"+granted );// it always returns false
    if (Build.VERSION.SDK_INT >= 23) {
        System.out.println("Build version is"+Build.VERSION.SDK_INT);
        if(!granted){
            requestPermission();
        }
    }

  private void requestPermission() {
    ActivityCompat.requestPermissions(activity,new String[]{
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.CALL_PHONE,
            Manifest.permission.CAMERA,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_CONTACTS,
            Manifest.permission.GET_ACCOUNTS,
    },RequestPermissionCode);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
    case RequestPermissionCode:
        if (grantResults.length > 0) {
            boolean ACCESS_FINE_LOCATION = grantResults[0] == PackageManager.PERMISSION_GRANTED;
            boolean RECORD_AUDIO = grantResults[1] == PackageManager.PERMISSION_GRANTED;
            boolean CALL_PHONE = grantResults[2] == PackageManager.PERMISSION_GRANTED;
            boolean CAMERA = grantResults[3] == PackageManager.PERMISSION_GRANTED;
            boolean WRITE_EXTERNAL_STORAGE = grantResults[4] == PackageManager.PERMISSION_GRANTED;
            boolean GET_ACCOUNTS = grantResults[5] == PackageManager.PERMISSION_GRANTED;
            boolean READ_CONTACTS = grantResults[6] == PackageManager.PERMISSION_GRANTED;

            if (ACCESS_FINE_LOCATION && RECORD_AUDIO && CALL_PHONE && CAMERA && WRITE_EXTERNAL_STORAGE && GET_ACCOUNTS && READ_CONTACTS) {
                Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(MainActivity.this,"Permission Denied",Toast.LENGTH_LONG).show();
            }
        }
        break;
    }
}
public boolean checkPermission() {

    int FirstPermissionResult= ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION);
    int SecondPermissionResult=ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO);
    int ThirdPermissionResult=ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE);
    int FourthPermissionResult=ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA);
    int FifthPermissionResult=ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    int SixthPermissionResult=ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.GET_ACCOUNTS);
    int SeventhPermissionResult=ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS);
    return FirstPermissionResult == PackageManager.PERMISSION_GRANTED &&
            SecondPermissionResult == PackageManager.PERMISSION_GRANTED &&
            ThirdPermissionResult == PackageManager.PERMISSION_GRANTED && 
            FourthPermissionResult == PackageManager.PERMISSION_GRANTED &&
            FifthPermissionResult == PackageManager.PERMISSION_GRANTED &&
            SixthPermissionResult == PackageManager.PERMISSION_GRANTED &&
            SeventhPermissionResult == PackageManager.PERMISSION_GRANTED;
}

From Android source and docs in PackageManager

public static final int PERMISSION_DENIED = -1;
public static final int PERMISSION_GRANTED = 0;

,在您的代码中,您正在将所有权限的权限结果相加。因此,即使没有授予一个项目的权限,您的result变量变为-1,并且您的方法返回false;

你的代码的另一个问题是,你正在请求像VIBRATE这样的东西的权限,请阅读这个文档来了解正常和危险权限之间的区别。

最后但最重要的问题是,google不建议一次询问所有运行时权限。App store也有可能会因为你的应用不遵守许可准则而拒绝你的应用

编辑:从列表中删除这些权限,然后再试一次

Manifest.permission.MODIFY_AUDIO_SETTINGS
Manifest.permission.CAPTURE_AUDIO_OUTPUT
Manifest.permission.CAPTURE_VIDEO_OUTPUT
Manifest.permission.CAPTURE_SECURE_VIDEO_OUTPUT
Manifest.permission.ACCESS_NETWORK_STATE
Manifest.permission.VIBRATE

请阅读文档,它清楚地提到你不要求run time permissionsnormal permissions

最新更新