android 6.0更新了全新的許可權機制,在使用一些涉及使用者隱私的許可權時,會讓使用者做出選擇是否該app可以使用此許可權。
本文章是根據鴻翔大神的Android 6.0執行時許可權處理完全解析部落格思路開始學習的。
在檢視本文章之前,希望大家可以移步官方開發文件 使用許可權。在該文章中,詳細描述了新版本的許可權機制的更改,宣告許可權未發生改變,需要詳細觀看在執行時請求許可權,檢視許可權最佳做法可以避免糟糕的使用者體驗。
在許可權中,分為Normal Permissions和Dangerous Permissions兩種類別。其中Normal Permissions屬於正常許可權,不需要使用者授權的;而Dangerous Permissions屬於危險許可權,與使用者隱私密切相關,所以授權給使用者。我們在程式中就需要對這種危險許可權提供使用者授權處理,保證app的正常執行。官方文件給出了正常許可權和危險許可權,不清楚的可以在官網檢視。
#####申請許可權的小案例 1).在AndroidManifest中新增許可權。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
複製程式碼
2).Activity中的具體申請方法(參考官網的課程步驟)
package com.example.mypremission;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
{
private static final int MY_PERMISSIONS_EXTERNAL_STORAGE_REQ_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermission();
}
public void requestPermission(){
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//檢查到未授權該許可權資訊
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//上一次使用者拒絕了開啟此許可權!
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
//請求許可權
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_EXTERNAL_STORAGE_REQ_CODE);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_EXTERNAL_STORAGE_REQ_CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
Toast.makeText(this, "申請成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "申請失敗", Toast.LENGTH_SHORT).show();
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
}
複製程式碼
執行程式:
接下來我會研究許可權機制的封裝,完成許可權批量申請的好辦法!