1. 程式人生 > >Android 7.0動態許可權

Android 7.0動態許可權

先看效果:

點選時候:

點選設定:

程式碼.MainActivity:

package com.example.permission;

import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
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.os.Bundle; import android.view.View; import android.widget.Toast; /** * 動態許可權之通訊錄備份 */ 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); } public void click(View view) { // 檢查是否有相應的許可權
boolean isPermission = checkSelfPermissionAll(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE}); if (isPermission) { Toast.makeText(MainActivity.this, "正在檢視!", Toast.LENGTH_SHORT).show(); return; } // 請求許可權 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSION_REQUEST_CODE); } // 檢查是否擁有指定的所有許可權 private boolean checkSelfPermissionAll(String[] permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == MY_PERMISSION_REQUEST_CODE) { boolean isPermission = true; for (int grant : grantResults) { // 判斷是否所有的許可權都已經授予了 if (grant != PackageManager.PERMISSION_GRANTED) { isPermission = false; break; } } if (isPermission) { Toast.makeText(MainActivity.this, "我看看", Toast.LENGTH_SHORT).show(); } else { // 彈出對話方塊告訴使用者需要許可權的原因, 並引導使用者去應用許可權管理中手動開啟許可權按鈕 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("備份通訊錄需要訪問") .setPositiveButton("設定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { 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); } }) .setNegativeButton("退出",null); builder.show(); } } } }
2.activity_main:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.permission.MainActivity">

    <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="您檢視" />

</LinearLayout>

3.特別要注意

********manifest 裡什麼許可權也沒有****