Android6.0動的アクセス権(アクセス権プロンプトボックスの許可と拒否ステータス情報を取得)
, , , 。
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) :
- //
- ContextCompat.checkSelfPermission(Context context, String permission)
:(android.content.pm.PackageManager ):
:PackageManager.PERMISSION_GRANTED
:PackageManager.PERMISSION_DENIED
, , 。 , ; , 。
(2) :
//
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity, String permission)
, 。 “ ” “ ” 。
PS:
- , ;
- , , ;
- AndroidManifest.xml , , , “ ” ;
- , “ ”, , “ ” , “ ” “ ”, , “ ” 。
(3) :
Activity , FragmentActivity Fragment onRequestPermissionsResult(…) 。
- /**
- *
- *
- * @param requestCode
- * ,
- *
- * @param permissions
- *
- *
- * @param grantResults
- * , permissions , , :
- * : PackageManager.PERMISSION_GRANTED
- * : PackageManager.PERMISSION_DENIED
- */
- @Override
- public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
- // ...
- }
demo
1、 AndroidManifest.xml :
xml version="1.0" encoding="utf-8"?>
<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
- xml version="1.0" encoding="utf-8"?>
- <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>
3、MainActivity :
package com.example.localuser.testandroid;
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();
}
}
- AndroidStudio , , 。