2017-02-12 64 views
1

我需要將新的權限添加到一箇舊項目中,該項目仍然需要堅持建設。下面是以前的配置:Android 6.0權限和目標

project.properties:
target=android-23

的AndroidManifest.xml:
<uses-sdk android:minSdkVersion="13" />

我改變AndroidManifest.xml中以
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="23" />
卻發現在我的Android 6.0手機,它仍然警告我,我的應用程序不符合最新的Android權限要求。它的行爲就好像它真的是23歲以前的目標。

那麼有沒有解決方案?

+1

您有2個選項:1-降低目標API,使用22或更低。 2-按照本教程實現新的權限系統https://developer.android.com/training/permissions/requesting.html – MatPag

+0

@MatPag我已經在代碼中實現了新的權限系統,並將目標設置爲23,但它仍然行爲正常像它瞄準較低。 – user1377046

回答

0

我只是分享代碼來添加檢查權限,這是自Marshnmallow以來一直採用的強制過程。例如,我檢查是否有權訪問攝像頭。

private void launchCamera() { 

    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(MyActivity.this, 
       Manifest.permission.CAMERA)) { 
      // Showing explanation to user to require permission 

      // <Build a dialog here. Following shows how to handle dialog clicks> 

      dialog.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // Yes, user wants to give permission 
        dialog.dismiss(); 
        ActivityCompat.requestPermissions(MyActivity.this, 
          new String[] {Manifest.permission.CAMERA}, 
          Constants.PERMISSION_CAMERA); 
       } 
      }); 
      alog.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // No, user does not want to give permission now 
        dialog.dismiss(); 
       } 
      }); 

     } else { 
      // No explanation needed, requesting for permission now. 
      ActivityCompat.requestPermissions(this, 
        new String[] {Manifest.permission.CAMERA}, 
        Constants.PERMISSION_CAMERA); 
     } 

    } else { 
     // Permission to get location has been granted already. 
     try { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, Constants.CAMERA_CAPTURE_REQUEST); 
     } catch (ActivityNotFoundException e) { 
      e.printStackTrace(); 
      Log.e(TAG, "Camera is not found!"); 
     } 

    } 
} 

下一步,我們必須根據所提供的系統對話框(這只是我們的對話框彈出後)用戶的響應來實現的方法。

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (requestCode == Constants.PERMISSION_CAMERA){ 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      launchCamera(); 

     } else if (grantResults[0] == PackageManager.PERMISSION_DENIED){ 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
        Manifest.permission.CAMERA)) { 

       /*Here we have to show a dialog/ something else to show user why app requires permission. This is a good practice.*/ 

       // Handle dialog clicks again 
       // Build a dialog here 
       btnPositiveOfDialog.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         // Yes, I want to give permission now after reading detailed message 
         dialog.dismiss(); 
         ActivityCompat.requestPermissions(UserInfoActivity.this, 
           new String[] {Manifest.permission.CAMERA}, 
           Constants.PERMISSION_CAMERA); 
        } 
       }); 
       btnNegativeOfDialog.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         // No, I still don't understand detailed message and want give permission away 
         dialog.dismiss(); 
        } 
       }); 

      } else { 
       // User checked 'Never ask again' 
       // Build a dialog here 
       btnPositiveOfDialog.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         // Yes, go to app settings and manually enable settings 
         dialog.dismiss(); 
         final Intent i = new Intent(); 
         i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
         i.addCategory(Intent.CATEGORY_DEFAULT); 
         i.setData(Uri.parse("package:" + UserInfoActivity.this.getPackageName())); 
         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
         i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
         MyActivity.this.startActivity(i); 
        } 
       }); 
       btnNegativeOfDialog.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         // No, I don't want to go to user settings and give permission now. 
         dialog.dismiss(); 
        } 
       }); 
       dialog.show(); 

      } 

     } 
    } 
} 
相關問題