Android6.0權(quán)限

大家好,我是小帥,好久沒有更新博客了,哈哈,有點懈怠.今天帶給大家的是android6.0權(quán)限,話說6.0都出來好久了,老手忽悠吧!我還是習(xí)慣喜歡上個效果圖!

adnroid6.0權(quán)限.gif

當(dāng)用戶拒絕權(quán)限的時候提示權(quán)限的處理,并且如何打開,中間的dialog可以自己定義.

6.0的運行時權(quán)限,需要使用如下的API:
int checkSelfPermission(String permission) 用來檢測應(yīng)用是否已經(jīng)具有權(quán)限
void requestPermissions(String[] permissions, int requestCode) 進行請求單個或多個權(quán)限
void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 用戶對請求作出響應(yīng)后的回調(diào)

其實簡單講就是對這幾個的API的使用,記住就行.還有一個問題就是什么時候需要用到6.0權(quán)限,其實這里只需要記住危險權(quán)限就行,下面小帥給大家準備一張表,需要的拿去


危險權(quán)限.jpg

左邊的是權(quán)限組,右邊的是權(quán)限組里面的權(quán)限,只要一次申請權(quán)限組里面的權(quán)限,對應(yīng)的權(quán)限組的權(quán)限也申請了.
好了,聊了那么久,還是直接上代碼吧,因為各種情況的都不一樣,所以這里簡單的舉了個列子

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mBtnMain;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView() {
        mBtnMain = (Button) findViewById(R.id.btn_main);
        mBtnMain.setOnClickListener(this);
    }

    private void callPhone() {
        //沒有授予權(quán)限
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED) {
            //做權(quán)限處理,主要是申請權(quán)限
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
        }else {
            doCallPhone();
        }
    }

    private void doCallPhone() {
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:"+"10086"));
        startActivity(intent);//代碼檢查工具,不需要處理
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_main:
                callPhone();
                break;
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            //申請了權(quán)限
            case 1:
            if (grantResults[0]== PackageManager.PERMISSION_GRANTED) {
                doCallPhone();
            }else {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("幫助")
                        .setMessage("當(dāng)前應(yīng)用缺少必要權(quán)限.請點擊'設(shè)置'-'權(quán)限',打開所需權(quán)限.最后點擊兩次后退按鈕,即可返回")
                        .setCancelable(false)
                        .setPositiveButton("設(shè)置", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                intent.setData(Uri.parse("package:" + getPackageName()));
                                startActivity(intent);
                            }
                        })
                        .setNegativeButton("退出", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        }).show();
                AlertDialog alert = builder.create();
            }
            break;
        }
    }
}

記得去清單文件里面添加權(quán)限
** <uses-permission android:name="android.permission.CALL_PHONE" />**
其實有時候覺得6.0權(quán)限沒有必要做,但當(dāng)你手機是6.0的時候,你如果只寫
doCallPhone()的邏輯代碼時候會得不到執(zhí)行.
當(dāng)然也可以有偷懶的方法了
你的應(yīng)用將targetSdkVersion設(shè)置低于23,那么在6.0的系統(tǒng)上不會為這個應(yīng)用開啟運行時權(quán)限機制,即按照以前的一刀切方式處理.
其他權(quán)限基本類型,有些手機比如小米,華為里面是定制版的Android,里面的dialog風(fēng)格是不一樣的,但實現(xiàn)原理不變,最后附上demo鏈接:
https://github.com/Chenshuai770/test_permision3.git
我是小帥,一起進步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android在 6.0中摒棄了之前的install time permissions model取而代之的是ru...
    Pan_大寶閱讀 3,411評論 9 36
  • 如今的手機操作系統(tǒng)已經(jīng)到了8.0,早在6.0的時候就有了權(quán)限的動態(tài)申請,危險的權(quán)限在使用到的時候動態(tài)申請。...
    porten閱讀 1,060評論 0 0
  • 從6.0 MarshMallow開始,Android支持動態(tài)權(quán)限管理,即有些權(quán)限需要在使用到的時候動態(tài)申請,根據(jù)用...
    看書的小蝸牛閱讀 7,123評論 0 26
  • 以銅為鑒,可以正衣冠;以人為鑒,可以明得失。 沒事就來想一想自己腦子中的想法,高級一點的說法,就是,玩一玩元認知。...
    愛所有的一切閱讀 239評論 0 2
  • 文來著高哥視界 作者:高哥 吃完晚飯后,一歲半的女兒在手機上聽兒歌,老爸在手機上看搞笑視頻和雞湯味十足的段子,媳婦...
    高哥視界閱讀 212評論 0 0

友情鏈接更多精彩內(nèi)容