Android6.0動的アクセス権(アクセス権プロンプトボックスの許可と拒否ステータス情報を取得)

76591 ワード

, , , 。 Android6.0 , , 360 , Root ,360 root Android6.0 1、 : Android6.0(API 23 ) , 。 Android6.0 , 。 。 2、 : Android 。       : (1) : , 。 , 。 : 、WIFI 、 。   。 (2) : , 。 : 、 、 。 , , 。 3、 : Android6.0(API 23) , targetSdkVersion   23 , AndroidManifest.xml , 。 API android.support.v4 , Activity android.support.v4.app.FragmentActivity. PS: android.support.v4.app.Fragment Fragment 。 (1) :

 
  
  1. //
  2. ContextCompat.checkSelfPermission(Context context, String permission)

:(android.content.pm.PackageManager ):

:PackageManager.PERMISSION_GRANTED

:PackageManager.PERMISSION_DENIED

, , 。 , ; , 。

(2) :

  1. //
  2. ActivityCompat.shouldShowRequestPermissionRationale(Activity activity, String permission)

    , 。 “ ” “ ” 。

    PS:

    • , ;
    • , ,
    • AndroidManifest.xml , , , “ ” ;
    • , “ ”, , “ ” , “ ” “ ”, , “ ” 。

    (3) :

    Activity , FragmentActivity Fragment onRequestPermissionsResult(…) 。

    1. /**
    2. *
    3. *
    4. * @param requestCode
    5. * ,
    6. *
    7. * @param permissions
    8. *
    9. *
    10. * @param grantResults
    11. * , permissions , , :
    12. * : PackageManager.PERMISSION_GRANTED
    13. * : PackageManager.PERMISSION_DENIED
    14. */
    15. @Override
    16. public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    17. // ...
    18. }

    demo

    1、 AndroidManifest.xml :

    1. xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.localuser.testandroid"> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">   <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> intent-filter> activity>   application>   manifest>

      2、 activity_main.xml

      1. xml version="1.0" encoding="utf-8"?>
      2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      3. package="com.example.localuser.testandroid">
      4. <uses-permission android:name="android.permission.READ_CONTACTS"/>
      5. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
      6. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      7.  
      8. <application
      9. android:icon="@mipmap/ic_launcher"
      10. android:label="@string/app_name"
      11. android:theme="@style/AppTheme">
      12.  
      13. <activity android:name=".MainActivity">
      14. <intent-filter>
      15. <action android:name="android.intent.action.MAIN" />
      16. <category android:name="android.intent.category.LAUNCHER" />
      17. intent-filter>
      18. activity>
      19.  
      20. application>
      21.  
      22. manifest>

      3、MainActivity :

      1. package com.example.localuser.testandroid;
      2.   import android.Manifest; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; import android.util.Log;   /** * * * @author xietansheng */ public class MainActivity extends AppCompatActivity {   private static final int MY_PERMISSION_REQUEST_CODE = 10000;   @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }   /** * , 。 * * 3 ( ): * 1. ; * 2. ; * 3. . */ public void click(View view) { /** * 1 : */ boolean isAllGranted = checkPermissionAllGranted( new String[] { Manifest.permission.READ_CONTACTS, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE } ); // 3 , if (isAllGranted) { doBackup(); return; }   /** * 2 : */ // , ActivityCompat.requestPermissions( this, new String[] { Manifest.permission.READ_CONTACTS, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, MY_PERMISSION_REQUEST_CODE ); }   /** * */ private boolean checkPermissionAllGranted(String[] permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { // , false Log.i("permission :"+permission," "); return false; }else{ Log.i("permission :"+permission," "); } } return true; }   /** * 3 : */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults);   if (requestCode == MY_PERMISSION_REQUEST_CODE) { boolean isAllGranted = true;   // for (int grant : grantResults) { if (grant != PackageManager.PERMISSION_GRANTED) { isAllGranted = false; break; } }   if (isAllGranted) { // , doBackup();   } else { // , openAppDetails(); } } }   /** * 4 : */ private void doBackup() { // , , Toast.makeText(this, " ...", Toast.LENGTH_SHORT).show(); }   /** * APP */ private void openAppDetails() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(" “ ” “ ”, “ -> ” !"); builder.setPositiveButton(" ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(intent); } }); builder.setNegativeButton(" ", null); builder.show(); }   }
        1. AndroidStudio , , 。