最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

談?wù)凙ndroid6.0運(yùn)行時(shí)的權(quán)限處理

 更新時(shí)間:2016年08月17日 15:28:24   投稿:daisy  
之前有人在 Android 6.0 的機(jī)型上運(yùn)行了DragGridView結(jié)果出異常奔潰了。想必問題的原因大家都知道,是Android 6.0新引入了在運(yùn)行時(shí)權(quán)限申請(qǐng)(Runtime Permissions)的功能。那么這所謂的運(yùn)行時(shí)申請(qǐng)權(quán)限究竟是怎么一回事呢,下面跟著小編一起來看看吧!

運(yùn)行時(shí)權(quán)限介紹

Android 6.0在我們?cè)械?code>AndroidManifest.xml聲明權(quán)限的基礎(chǔ)上,

又新增了運(yùn)行時(shí)權(quán)限動(dòng)態(tài)檢測(cè),以下權(quán)限都需要在運(yùn)行時(shí)判斷:

     1、身體傳感器

     2、日歷

     3、攝像頭

     4、通訊錄

     5、地理位置

     6、麥克風(fēng)

     7、電話

     8、短信

     9、存儲(chǔ)空間

在 Android 6.0 中,app 如果想要獲得某些權(quán)限,會(huì)在應(yīng)用中彈出一個(gè)對(duì)話框,讓用戶確認(rèn)是否授予該權(quán)限。

具體的截圖如下:

這要做的好處就是運(yùn)行一個(gè) app 時(shí)可以拒絕其中的某些權(quán)限,防止 app 觸及到你的隱私(比如說通訊錄、短信之類的)。而在 Android 6.0 之前,若同意安裝 app ,就意味著該 app 可以獲取權(quán)限列表中的所有權(quán)限。(注:這里所指的都是原生 Android 系統(tǒng),比如 MIUI 之類的第三方 ROM 很早就具備了這種功能。)

接下來就來看看相關(guān)的 API 吧,首先我們來看看 Context.checkSelfPermission(String permission) 方法,該方法主要用于檢測(cè)該 app 是否已經(jīng)被賦予了某權(quán)限,傳入的參數(shù)有。如果已被賦予,則返回 PERMISSION_GRANTED ,否則返回 PERMISSION_DENIED 。

若返回了 PERMISSION_DENIED ,那么我們就要去申請(qǐng)?jiān)摍?quán)限了。這時(shí)就要用到 Activity.requestPermissions(String[] permissions, int requestCode) 這個(gè)方法了。顧名思義,該方法的作用就是申請(qǐng)某些權(quán)限了。第一個(gè)參數(shù)就是要申請(qǐng)的權(quán)限,可以看到參數(shù)形式是一個(gè)數(shù)組,也就是說可以一次申請(qǐng)多個(gè)權(quán)限。而第二個(gè)參數(shù)就是申請(qǐng)權(quán)限的代號(hào),主要用于在之后的回調(diào)中選擇。

當(dāng)用戶在權(quán)限申請(qǐng)的對(duì)話框中作出選擇后,就會(huì)回調(diào) onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) 方法。

     第一個(gè)參數(shù)就是上面的權(quán)限代號(hào);

     第二個(gè)參數(shù)是申請(qǐng)的權(quán)限數(shù)組;

     第三個(gè)參數(shù)就是權(quán)限申請(qǐng)的結(jié)果。

結(jié)合上面的幾個(gè)方法,可以寫出如下所示的權(quán)限申請(qǐng)代碼模版:

public static final int READ_CONTACTS_REQUEST_CODE = 101;

// 如果權(quán)限沒有被授予
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS) !=
 PackageManager.PERMISSION_GRANTED) {
 // 申請(qǐng)權(quán)限
 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
} else {
 // TODO 權(quán)限已經(jīng)被授予

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 switch (requestCode) {
 case READ_CONTACTS_REQUEST_CODE:
  if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  // TODO 用戶已經(jīng)授予了權(quán)限

  } else {
  // TODO 用戶拒絕授予權(quán)限

  }
  break;
 }

}

在這里,還有一個(gè)方法需要注意下,那就是 shouldShowRequestPermissionRationale (Activity activity, String permission) 方法。這個(gè)方法的作用就是當(dāng)用戶拒絕了某個(gè)權(quán)限之后,下一次就會(huì)顯示出需要該權(quán)限的說明。

關(guān)于運(yùn)行時(shí)申請(qǐng)權(quán)限基本就這樣了,值得提醒的是,并不是所有的權(quán)限都需要運(yùn)行時(shí)申請(qǐng),只有“危險(xiǎn)”的權(quán)限才通過運(yùn)行時(shí)來申請(qǐng)。比如說讀取聯(lián)系人、獲取位置信息、讀寫SD卡等等都為“危險(xiǎn)權(quán)限”,而比如振動(dòng)、聯(lián)網(wǎng)、藍(lán)牙等就是普通權(quán)限了,就不需要運(yùn)行時(shí)申請(qǐng)了。

說完了運(yùn)行時(shí)申請(qǐng)權(quán)限后,另外還有一點(diǎn)需要注意的是,在 Android 6.0 顯示懸浮窗也有一個(gè)“坑”。如果調(diào)用平常的顯示懸浮窗的方法,會(huì)拋出 “permission denied for this window type” 異常。解決的方案就是在顯示懸浮窗之前,需要調(diào)用一下 Settings.canDrawOverlays(context) 這個(gè)方法。若該方法返回 true ,則說明用戶同意創(chuàng)建懸浮窗;否則可以跳轉(zhuǎn)到相關(guān)的設(shè)置頁(yè)面。具體的代碼模版如下:

if (Build.VERSION.SDK_INT >= 23) {
 if (Settings.canDrawOverlays(context)) {
 // 顯示懸浮窗
 } else {
 // 跳轉(zhuǎn)到相關(guān)的設(shè)置頁(yè)面
 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
 startActivity(intent);
 }
} else {
 // 版本低于Android 6.0,直接顯示懸浮窗
}

總結(jié)

好了,就到這里吧,以上就是Android6.0運(yùn)行時(shí)的權(quán)限處理的全部問題,希望這篇文章對(duì)大家開發(fā)Android能有所幫助。

相關(guān)文章

  • Android 中ThreadLocal的深入理解

    Android 中ThreadLocal的深入理解

    這篇文章主要介紹了Android 中ThreadLocal的深入理解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解應(yīng)用ThreadLocal,需要的朋友可以參考下
    2017-09-09
  • Android實(shí)現(xiàn)引導(dǎo)頁(yè)的圓點(diǎn)指示器

    Android實(shí)現(xiàn)引導(dǎo)頁(yè)的圓點(diǎn)指示器

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)引導(dǎo)頁(yè)的圓點(diǎn)指示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Android使用ViewFlipper實(shí)現(xiàn)圖片切換功能

    Android使用ViewFlipper實(shí)現(xiàn)圖片切換功能

    這篇文章主要為大家詳細(xì)介紹了Android使用ViewFlipper實(shí)現(xiàn)圖片切換功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 淺談Android面向切面編程(AOP)

    淺談Android面向切面編程(AOP)

    這篇文章主要介紹了淺談Android面向切面編程(AOP),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android Compose Column列表不自動(dòng)刷新問題

    Android Compose Column列表不自動(dòng)刷新問題

    這篇文章主要介紹了Android Compose Column列表數(shù)據(jù)更新列表不刷新的問題,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2023-01-01
  • Android GridView實(shí)現(xiàn)滾動(dòng)到指定位置的方法

    Android GridView實(shí)現(xiàn)滾動(dòng)到指定位置的方法

    這篇文章主要介紹了Android GridView實(shí)現(xiàn)滾動(dòng)到指定位置的方法,本文介紹了4個(gè)相關(guān)的方法,分別對(duì)它們做了講解,需要的朋友可以參考下
    2015-06-06
  • Android實(shí)現(xiàn)Bitmap位圖旋轉(zhuǎn)效果

    Android實(shí)現(xiàn)Bitmap位圖旋轉(zhuǎn)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)Bitmap位圖旋轉(zhuǎn)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android仿抖音右滑清屏左滑列表功能的實(shí)現(xiàn)代碼

    Android仿抖音右滑清屏左滑列表功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android仿抖音右滑清屏左滑列表功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • AndroidStudio中重載方法@Override的使用詳解

    AndroidStudio中重載方法@Override的使用詳解

    這篇文章主要介紹了AndroidStudio中重載方法@Override的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Android實(shí)現(xiàn)簡(jiǎn)單手電筒功能

    Android實(shí)現(xiàn)簡(jiǎn)單手電筒功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單手電筒,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評(píng)論

武义县| 珲春市| 宜城市| 余姚市| 闽侯县| 依安县| 韶关市| 四平市| 邓州市| 融水| 永德县| 化州市| 葫芦岛市| 苗栗县| 无棣县| 监利县| 屯昌县| 萨嘎县| 扎囊县| 景宁| 台州市| 秭归县| 大港区| 呼图壁县| 卢湾区| 海兴县| 青冈县| 安仁县| 宁远县| 六盘水市| 鄯善县| 新野县| 柘城县| 象州县| 左权县| 宝鸡市| 贺兰县| 美姑县| 湖北省| 汪清县| 普兰店市|