Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android6.0權限檢測與申請

Android6.0權限檢測與申請

編輯:關於Android編程

2015年8月18日早間消息,谷歌終於在M開頭的眾多甜品中為AndroidM確定了Marshmallow(棉花糖)這個正式名稱,版本號也被確定為Android 6.0。

Android6.0相對於前面的版本更新的內容,只有權限管理是我們開發者需要去注意的。

之前的安卓應用都會索取一大堆的權限,也不知道它想干什麼。現在用戶權限管理機制已經大大改善了。現在的權限設置類似iPhone平台一樣,只有在應用需要使用該功能的時候才會啟用,而不是在首次安裝應用的時候獲得用戶授權。

版本對比:

5.0-,只需要在manifest.xml中注冊聲明

5.0+,用戶可以在安裝的時候關閉某些權限

6.0+,對於一些用戶隱私權限總是會第一次提示用戶是否授予權限(和iphone類似)

作為開發者,最重要的是要知道這一改變會如何影響我們的項目。

 

Android6.0將權限進行了分類,分為普通權限和危險權限

普通權限:不涉及用戶隱私,不需要用戶進行授權,比如訪問網絡等;

危險權限:涉及用戶隱私,需要用戶進行授權,比如讀取SD卡等;

 

可以通過adb命令去進行查看:

adb shell pm list permissions -d –g

 

所以在我們的代碼中我們需要去對於6.0+的設備去主動申請危險權限。

操作步驟:

1、在AndroidManifest中添加需要的權限(不可省)

2、檢查權限

3、申請授權

4、處理申請回調

權限的申請一般都是定義一個抽象類,當activity被創建的時候才去申請危險權限。

 

BaseActivity:

public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    /*
    * 為子類提供權限檢查方法
    * */
    public boolean hasPermission(String... permissions) {
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission)
                    != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }
    /*
    * 為子類提供一個權限請求方法
    * */
    public void requestPermission(int code,String... permissions){
        ActivityCompat.requestPermissions(this,permissions,code);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode){
            case Constants.WRITE_EXTERNAL_CODE:
                doSDCardPermission();
                break;
            case Constants.CALL_PHONE:
                doCallPhone();
                break;
        }

    }

    //默認的寫SD卡權限處理,讓子類去具體實現
    public void doSDCardPermission() {
    }

    //默認的打電話權限處理,讓子類去具體實現
    public void doCallPhone(){

    }

}
public class Constants {

    //權限常量相關
    public static final int WRITE_EXTERNAL_CODE = 0x01;
    public static final int CALL_PHONE = 0x02;
}

 

除此之外還有一種方法去實現,是通過第三方開源庫PermissionGen去實現,內部是通過反射去實現的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved