Android6.0權(quán)限適配

Android 5.0與6.0權(quán)限的不同

  • 5.0以前,只需要manifest.xml中注冊(cè)聲明即可
  • 5.0以后,用戶可以在安裝的時(shí)候關(guān)閉某些權(quán)限
  • 6.0以后,對(duì)于一些用戶隱私權(quán)限總是會(huì)在第一次提示用戶是否授權(quán)權(quán)限

運(yùn)行時(shí)權(quán)限的優(yōu)勢(shì)

  • 新的權(quán)限機(jī)制更好的保護(hù)了用戶的隱私
  • 給了程序向用戶說(shuō)明權(quán)限的作用
  • 可以防止一些惡意程序盜取用戶或者手機(jī)信息,增強(qiáng)了android 系統(tǒng)的安全性

運(yùn)行時(shí)權(quán)限的分類(lèi)

  • Normal Premission
  • Dangerous Permission &&Dangerous Premission Group

權(quán)限組的概念

如果你申請(qǐng)某個(gè)危險(xiǎn)的權(quán)限津辩,假設(shè)你的app早已被用戶授權(quán)了同一組的某個(gè)危險(xiǎn)權(quán)限,那么系統(tǒng)會(huì)立即授權(quán)容劳,而不需要用戶去點(diǎn)擊授權(quán)喘沿。

使用流程

1.在manifest中添加需要的權(quán)限,這里以打電話和寫(xiě)sd卡為例
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
2.應(yīng)用中一般不止一個(gè)地方會(huì)用到權(quán)限竭贩,所以對(duì)權(quán)限的處理最好放在父類(lèi)中
BaseActivity 里有以下幾個(gè)方法

 /**
     * 為子類(lèi)提供權(quán)限檢查方法
     * @param premissions
     * @return
     */
    public boolean hasPremission(String... premissions){

        for(String premission : premissions){
            if(ContextCompat.checkSelfPermission(this,premission)
            != PackageManager.PERMISSION_GRANTED){
                return false;
            }
        }
        return true;
    }
  /**
     * 為子類(lèi)提供請(qǐng)求權(quán)限的方法
     */
    public void requestPremission(int code ,String... premissions){
        ActivityCompat.requestPermissions(this,premissions,code);
    }
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch (requestCode){
            case Constants.WRITE_EXTERNAL_STORAGE_CODE:

                doSdPermission();
                break;

            case Constants.CALL_PHONE_CODE:

                doCallPhone();
                break;
        }
    }

    /**
     * 為子類(lèi)提供一個(gè)打電話的方法
     */
    public void doCallPhone() {
    }

    /**
     * 為子類(lèi)提供一個(gè)寫(xiě)sd卡的方法
     */
    public void doSdPermission() {
    }

在子類(lèi)中繼承BaseActivity

//寫(xiě)sd卡方法
 private void doWriteSd() {

        if(!hasPremission(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
            requestPremission(Constants.WRITE_EXTERNAL_STORAGE_CODE,Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }else {
            Toast.makeText(this,"此處處理操作sd卡的動(dòng)作如下載文件",Toast.LENGTH_SHORT).show();
        }
    }
//撥打電話
 private void callPhone() {
        if(!hasPremission(Manifest.permission.CALL_PHONE)){
            requestPremission(Constants.CALL_PHONE_CODE,Manifest.permission.CALL_PHONE);
        }else {
            doCallPhone();
        }
    }
    @Override
    public void doCallPhone(){

        //用intent啟動(dòng)撥打電話
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+"10010"));
        this.startActivity(intent);
    }

此處貼出完整代碼

public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    /**
     * 為子類(lèi)提供權(quán)限檢查方法
     * @param premissions
     * @return
     */
    public boolean hasPremission(String... premissions){

        for(String premission : premissions){
            if(ContextCompat.checkSelfPermission(this,premission)
            != PackageManager.PERMISSION_GRANTED){
                return false;
            }
        }
        return true;
    }

    /**
     * 為子類(lèi)提供請(qǐng)求權(quán)限的方法
     */
    public void requestPremission(int code ,String... premissions){
        ActivityCompat.requestPermissions(this,premissions,code);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch (requestCode){
            case Constants.WRITE_EXTERNAL_STORAGE_CODE:

                doSdPermission();
                break;

            case Constants.CALL_PHONE_CODE:

                doCallPhone();
                break;
        }
    }

    /**
     * 為子類(lèi)提供一個(gè)打電話的方法
     */
    public void doCallPhone() {
    }

    /**
     * 為子類(lèi)提供一個(gè)寫(xiě)sd卡的方法
     */
    public void doSdPermission() {
    }
}
public class MainActivity extends BaseActivity implements View.OnClickListener{

    private Button sd;
    private Button call;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        sd = (Button)findViewById(R.id.btn_sd);
        call = (Button)findViewById(R.id.btn_call);
        sd.setOnClickListener(this);
        call.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_sd:
                doWriteSd();
                break;
            case R.id.btn_call:
                callPhone();
                break;
        }
    }

    private void callPhone() {
        if(!hasPremission(Manifest.permission.CALL_PHONE)){
            requestPremission(Constants.CALL_PHONE_CODE,Manifest.permission.CALL_PHONE);
        }else {
            doCallPhone();
        }
    }
    @Override
    public void doCallPhone(){

        //用intent啟動(dòng)撥打電話
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+"10010"));
        this.startActivity(intent);
    }

    private void doWriteSd() {

        if(!hasPremission(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
            requestPremission(Constants.WRITE_EXTERNAL_STORAGE_CODE,Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }else {
            Toast.makeText(this,"此處處理操作sd卡的動(dòng)作如下載文件",Toast.LENGTH_SHORT).show();
        }
    }
}

mainfest.xml

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
**
 * 整個(gè)應(yīng)用的常量放置
 * Created by Lenovo on 2016/12/6.
 */
public class Constants {

    public static final int WRITE_EXTERNAL_STORAGE_CODE = 0x01;
    public static final int CALL_PHONE_CODE = 0x02;
}

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_sd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="讀寫(xiě)SD卡" />

    <Button
        android:id="@+id/btn_call"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="讀寫(xiě)SD卡" />
</LinearLayout>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚜印,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子留量,更是在濱河造成了極大的恐慌窄赋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楼熄,死亡現(xiàn)場(chǎng)離奇詭異忆绰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)可岂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)错敢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缕粹,你說(shuō)我怎么就攤上這事稚茅。” “怎么了平斩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵亚享,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我双戳,道長(zhǎng)虹蒋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任飒货,我火速辦了婚禮,結(jié)果婚禮上峭竣,老公的妹妹穿的比我還像新娘塘辅。我一直安慰自己,他們只是感情好皆撩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布扣墩。 她就那樣靜靜地躺著哲银,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呻惕。 梳的紋絲不亂的頭發(fā)上荆责,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音亚脆,去河邊找鬼做院。 笑死,一個(gè)胖子當(dāng)著我的面吹牛濒持,可吹牛的內(nèi)容都是我干的键耕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柑营,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屈雄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起官套,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酒奶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奶赔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體讥蟆,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年纺阔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘸彤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笛钝,死狀恐怖质况,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玻靡,我是刑警寧澤结榄,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站囤捻,受9級(jí)特大地震影響臼朗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝎土,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一视哑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧誊涯,春花似錦挡毅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)段磨。三九已至,卻和暖如春耗绿,著一層夾襖步出監(jiān)牢的瞬間苹支,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工误阻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留债蜜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓堕绩,卻偏偏與公主長(zhǎng)得像策幼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奴紧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 從6.0 MarshMallow開(kāi)始特姐,Android支持動(dòng)態(tài)權(quán)限管理,即有些權(quán)限需要在使用到的時(shí)候動(dòng)態(tài)申請(qǐng)黍氮,根據(jù)用...
    看書(shū)的小蝸牛閱讀 6,955評(píng)論 0 26
  • Android API 23之后以下權(quán)限需要?jiǎng)討B(tài)獲忍坪: DangerousPermissions****如下: 先...
    十方天儀君閱讀 1,284評(píng)論 2 4
  • 源碼傳送門(mén) 前言 現(xiàn)在談?wù)揂ndroid權(quán)限適配可能有點(diǎn)沒(méi)必要,因?yàn)榫W(wǎng)上關(guān)于權(quán)限適配的文章很多沫浆,搜一下Androi...
    Code4Android閱讀 3,918評(píng)論 3 14
  • 最近關(guān)于6.0權(quán)限適配的問(wèn)題捷枯,還是有很多,我之前在別的文章中提到過(guò)专执,應(yīng)該怎樣去做適配淮捆,但是并沒(méi)有給出完整代碼,只給...
    mymdeep閱讀 236評(píng)論 0 1
  • 雖然網(wǎng)上已經(jīng)有很多講解Android6.0適配的文章本股,也都寫(xiě)的不錯(cuò)攀痊,但是有一個(gè)問(wèn)題,很多文章都沒(méi)有提到拄显。??在權(quán)限...
    呼吸的蝸牛閱讀 301評(píng)論 0 13