欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android復(fù)習(xí)(四)權(quán)限—>請(qǐng)求應(yīng)用權(quán)限-創(chuàng)新互聯(lián)

每款 Android 應(yīng)用都在訪問受限的沙盒中運(yùn)行。如果應(yīng)用需要使用其自己的沙盒外的資源或信息,則必須請(qǐng)求相應(yīng)權(quán)限。 要聲明您的應(yīng)用需要某項(xiàng)權(quán)限,您可以在應(yīng)用清單中列出該權(quán)限,然后在運(yùn)行時(shí)請(qǐng)求用戶批準(zhǔn)每項(xiàng)權(quán)限(適用于 Android 6.0 及更高版本)。Android復(fù)習(xí)(四)權(quán)限—&
gt;請(qǐng)求應(yīng)用權(quán)限

本頁介紹如何使用 Android 支持庫來檢查和請(qǐng)求權(quán)限。Android 框架從 Android 6.0(API 級(jí)別 23)開始提供類似的方法,但如果使用支持庫,將會(huì)更容易與較低的 Android 版本實(shí)現(xiàn)兼容性。

創(chuàng)新互聯(lián)是專業(yè)的贊皇網(wǎng)站建設(shè)公司,贊皇接單;提供成都做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行贊皇網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!向清單添加權(quán)限

對(duì)于所有 Android 版本,要聲明應(yīng)用需要某項(xiàng)權(quán)限,請(qǐng)?jiān)趹?yīng)用清單中添加 <uses-permission> 元素,作為頂級(jí) <manifest> 元素的子項(xiàng)。例如,需要訪問互聯(lián)網(wǎng)的應(yīng)用需在清單中添加以下代碼行:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.snazzyapp"> <uses-permission android:name="android.permission.INTERNET"/> <!-- other permissions go here --> <application ...> ... </application> </manifest>

系統(tǒng)在您聲明權(quán)限之后的行為取決于權(quán)限的敏感程度。有些權(quán)限被視為“常規(guī)”權(quán)限,因此系統(tǒng)會(huì)在安裝應(yīng)用時(shí)立即授予這些權(quán)限。還有些則被視為“危險(xiǎn)”權(quán)限,因此需要用戶明確向您的應(yīng)用授予相應(yīng)訪問權(quán)限。如需詳細(xì)了解不同類型的權(quán)限,請(qǐng)參閱保護(hù)級(jí)別。

檢查權(quán)限

如果應(yīng)用需要一項(xiàng)危險(xiǎn)權(quán)限,那么每次執(zhí)行需要該權(quán)限的操作時(shí),您都必須檢查自己是否具有該權(quán)限。從 Android 6.0(API 級(jí)別 23)開始,用戶可隨時(shí)從任何應(yīng)用撤消權(quán)限,即使應(yīng)用以較低的 API 級(jí)別為目標(biāo)平臺(tái)也是如此。因此,即使應(yīng)用昨天使用了相機(jī),也不能認(rèn)為它今天仍具有該權(quán)限。

要檢查您是否具有某項(xiàng)權(quán)限,請(qǐng)調(diào)用 ContextCompat.checkSelfPermission() 方法。例如,以下代碼段展示了如何檢查 Activity 是否具有向日歷寫入數(shù)據(jù)的權(quán)限:


java代碼: if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted } kotlin代碼: if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted }

如果應(yīng)用具有此權(quán)限,該方法將返回 PERMISSION_GRANTED,并且應(yīng)用可以繼續(xù)操作。如果應(yīng)用不具備此權(quán)限,該方法將返回 PERMISSION_DENIED,且應(yīng)用必須明確要求用戶授予權(quán)限。

請(qǐng)求權(quán)限

當(dāng)您的應(yīng)用從 checkSelfPermission() 收到 PERMISSION_DENIED 時(shí),您需要提示用戶授予該權(quán)限。Android 為您提供了幾種可用來請(qǐng)求權(quán)限的方法(如 requestPermissions()),如下面的代碼段所示。調(diào)用這些方法時(shí),會(huì)顯示一個(gè)無法自定義的標(biāo)準(zhǔn) Android 對(duì)話框。

如何向用戶顯示此內(nèi)容取決于設(shè)備的 Android 版本以及應(yīng)用的目標(biāo)版本,如權(quán)限概覽中所述。

解釋為什么應(yīng)用需要權(quán)限

在某些情況下,您需要幫助用戶理解為什么您的應(yīng)用需要某項(xiàng)權(quán)限。例如,如果用戶啟動(dòng)一款攝影應(yīng)用,用戶或許不會(huì)對(duì)該應(yīng)用請(qǐng)求使用相機(jī)的權(quán)限感到驚訝,但用戶可能不理解為什么該應(yīng)用想要訪問用戶的位置或聯(lián)系人。在您的應(yīng)用請(qǐng)求權(quán)限之前,不妨考慮向用戶提供解釋。請(qǐng)注意,您肯定不希望您的解釋讓用戶不勝其煩;如果您提供太多解釋,用戶可能會(huì)覺得這款應(yīng)用很麻煩,因而將其移除。

您可以使用的一種方法是只在用戶之前拒絕過該權(quán)限請(qǐng)求的情況下才提供解釋。Android 提供了一種實(shí)用程序方法,即 shouldShowRequestPermissionRationale()。如果用戶之前拒絕了該請(qǐng)求,該方法將返回 true;如果用戶之前拒絕了某項(xiàng)權(quán)限并且選中了權(quán)限請(qǐng)求對(duì)話框中的不再詢問選項(xiàng),或者如果設(shè)備政策禁止該權(quán)限,該方法將返回 false。

如果用戶不斷嘗試使用需要某項(xiàng)權(quán)限的功能,但一直拒絕權(quán)限請(qǐng)求,這或許意味著,用戶不理解為什么應(yīng)用需要該權(quán)限才能提供這項(xiàng)功能。在這種情況下,顯示解釋或許是不錯(cuò)的做法。

應(yīng)用權(quán)限最佳做法中提供了更多建議,指導(dǎo)您如何在請(qǐng)求權(quán)限時(shí)創(chuàng)造良好的用戶體驗(yàn)。

在必要時(shí)請(qǐng)求成為默認(rèn)處理程序

有些應(yīng)用依賴于訪問與通話記錄和短信有關(guān)的敏感用戶信息。如果您想請(qǐng)求特定于通話記錄和短信的權(quán)限,并將應(yīng)用發(fā)布到 Play 商店,則必須在請(qǐng)求這些運(yùn)行時(shí)權(quán)限之前提示用戶將應(yīng)用設(shè)置為“默認(rèn)處理程序”以獲得核心系統(tǒng)功能。

如需詳細(xì)了解默認(rèn)處理程序(包括有關(guān)如何向用戶顯示默認(rèn)處理程序提示的指南),請(qǐng)參閱有關(guān)僅在默認(rèn)處理程序中使用的權(quán)限的指南。

請(qǐng)求您需要的權(quán)限

如果您的應(yīng)用還不具備它需要的權(quán)限,那么它必須調(diào)用一個(gè) requestPermissions() 方法來請(qǐng)求相應(yīng)權(quán)限。您的應(yīng)用將傳遞它想要的權(quán)限,以及您指定用于識(shí)別此權(quán)限請(qǐng)求的整數(shù)請(qǐng)求代碼。此方法異步運(yùn)行。它會(huì)立即返回結(jié)果,并且在用戶響應(yīng)提示后,系統(tǒng)會(huì)利用相應(yīng)結(jié)果來調(diào)用應(yīng)用的回調(diào)方法,在調(diào)用過程中傳遞的請(qǐng)求代碼與應(yīng)用傳遞給 requestPermissions() 的請(qǐng)求代碼相同。

以下代碼將檢查應(yīng)用是否具有讀取用戶聯(lián)系人的權(quán)限。如果沒有該權(quán)限,它會(huì)檢查是否應(yīng)顯示需要該權(quán)限的解釋,如果不需要解釋,它會(huì)請(qǐng)求該權(quán)限:

java代碼: // Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) { // Show an explanation 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; request the permission ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an // app-defined int constant. The callback method gets the // result of the request. } } else { // Permission has already been granted } kotlin代碼: // Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) { // Show an explanation 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(thisActivity, arrayOf(Manifest.permission.READ_CONTACTS), MY_PERMISSIONS_REQUEST_READ_CONTACTS) // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an // app-defined int constant. The callback method gets the // result of the request. } } else { // Permission has already been granted }  

系統(tǒng)顯示的提示說明了您的應(yīng)用需要訪問的權(quán)限組,而不是具體權(quán)限。

注意:當(dāng)您的應(yīng)用調(diào)用 requestPermissions() 時(shí),系統(tǒng)會(huì)向用戶顯示一個(gè)標(biāo)準(zhǔn)對(duì)話框。您的應(yīng)用無法配置或更改該對(duì)話框。如果您需要向用戶提供任何信息或解釋,您應(yīng)該在調(diào)用 requestPermissions() 之前這樣做,如解釋為什么應(yīng)用需要權(quán)限中所述。

處理權(quán)限請(qǐng)求響應(yīng)

當(dāng)用戶響應(yīng)您應(yīng)用的權(quán)限請(qǐng)求時(shí),系統(tǒng)會(huì)調(diào)用您應(yīng)用的 onRequestPermissionsResult() 方法,在調(diào)用過程中向其傳遞用戶響應(yīng)。您的應(yīng)用必須替換該方法,以查明是否已向其授予相應(yīng)權(quán)限。在回調(diào)過程中傳遞的請(qǐng)求代碼與傳遞給 requestPermissions() 的請(qǐng)求代碼相同。例如,如果應(yīng)用請(qǐng)求 READ_CONTACTS 訪問權(quán)限,則它可能采用以下回調(diào)方法:

java代碼: @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { // 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. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } // other 'case' lines to check for other // permissions this app might request. } } kotlin代碼: override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { when (requestCode) { MY_PERMISSIONS_REQUEST_READ_CONTACTS -> { // If request is cancelled, the result arrays are empty. if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) { // permission was granted, yay! Do the // contacts-related task you need to do. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return } // Add other 'when' lines to check for other // permissions this app might request. else -> { // Ignore all other requests. } } }  

系統(tǒng)顯示的對(duì)話框說明了您的應(yīng)用需要訪問的權(quán)限組,它不會(huì)列出具體權(quán)限。例如,如果請(qǐng)求 READ_CONTACTS 權(quán)限,系統(tǒng)對(duì)話框只會(huì)說明您的應(yīng)用需要訪問設(shè)備的聯(lián)系人。用戶只需要針對(duì)每個(gè)權(quán)限組授予一次權(quán)限。如果您的應(yīng)用請(qǐng)求該組中的其他任何權(quán)限(已在您的應(yīng)用清單中列出),系統(tǒng)會(huì)自動(dòng)授予這些權(quán)限。當(dāng)您請(qǐng)求權(quán)限時(shí),系統(tǒng)會(huì)調(diào)用您的 onRequestPermissionsResult() 回調(diào)方法并傳遞 PERMISSION_GRANTED,就像用戶通過系統(tǒng)對(duì)話框明確同意了您的請(qǐng)求時(shí)的處理方式一樣。

注意:您的應(yīng)用仍需要明確請(qǐng)求它需要的每項(xiàng)權(quán)限,即使用戶已授予同一組中的其他權(quán)限。此外,權(quán)限分組在將來的 Android 版本中可能會(huì)發(fā)生變化。您的代碼不應(yīng)依賴于特定權(quán)限屬于或不屬于同一組的假設(shè)。

例如,假設(shè)您在應(yīng)用清單中同時(shí)列出了 READ_CONTACTS 和 WRITE_CONTACTS。如果您請(qǐng)求 READ_CONTACTS 且用戶授予了該權(quán)限,那么當(dāng)您隨后又請(qǐng)求 WRITE_CONTACTS 時(shí),系統(tǒng)會(huì)立即授予您該權(quán)限,而無需與用戶交互。

如果用戶拒絕了權(quán)限請(qǐng)求,您的應(yīng)用應(yīng)采取適當(dāng)?shù)拇胧@?,您的?yīng)用可能會(huì)顯示一個(gè)對(duì)話框,解釋它為什么無法執(zhí)行用戶請(qǐng)求的需要該權(quán)限的操作。

當(dāng)系統(tǒng)要求用戶授予某項(xiàng)權(quán)限時(shí),用戶可以選擇告知系統(tǒng)不要再次請(qǐng)求該權(quán)限。在這種情況下,只要應(yīng)用使用 requestPermissions() 再次請(qǐng)求該權(quán)限,系統(tǒng)就會(huì)立即拒絕請(qǐng)求。系統(tǒng)會(huì)調(diào)用您的 onRequestPermissionsResult() 回調(diào)方法并傳遞 PERMISSION_DENIED,就像用戶再次明確拒絕了您的請(qǐng)求時(shí)的處理方式一樣。如果設(shè)備政策禁止應(yīng)用具有該權(quán)限,該方法也會(huì)返回 false。這意味著,當(dāng)您調(diào)用 requestPermissions() 時(shí),您不能假定已經(jīng)發(fā)生與用戶的任何直接交互。

要在請(qǐng)求應(yīng)用權(quán)限時(shí)提供最佳用戶體驗(yàn),另請(qǐng)參閱應(yīng)用權(quán)限最佳做法。

按 API 級(jí)別聲明權(quán)限

要僅在支持運(yùn)行時(shí)權(quán)限的設(shè)備(即運(yùn)行 Android 6.0(API 級(jí)別 23)或更高版本的設(shè)備)上聲明某項(xiàng)權(quán)限,請(qǐng)?zhí)砑?nbsp;uses- permission-sdk-23 標(biāo)記,而不是 uses-permission 標(biāo)記。

使用這些標(biāo)記中的任意一個(gè)時(shí),您均可設(shè)置 maxSdkVersion 屬性,以指定在運(yùn)行更高版本的設(shè)備上不需要特定權(quán)限。

標(biāo)題名稱:Android復(fù)習(xí)(四)權(quán)限—&gt;請(qǐng)求應(yīng)用權(quán)限-創(chuàng)新互聯(lián)
地址分享:http://aaarwkj.com/article46/ccoihg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司ChatGPT、網(wǎng)站排名、微信公眾號(hào)、網(wǎng)站營銷用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
国产激情小网站免费看| 欧美一级特黄大片做受另类| 日韩区一区二在线视频| 日本欧美激情在线观看| 久久精品国产亚洲av超一| 五月开心婷婷开心五月活动推荐| 亚洲av乱码一区二区三| 国产精品人妻在线av| 密臀精品国产一区二区| av天堂高清在线观看| 日本久久久视频在线观看| 可以免费看的欧美黄片| 最新国产激情福利网站| 免费在线观看av大全| 久久成人日韩电影午夜| 国产一区二区三区在线精品专区| 韩国日本午夜福利在线| 久久精品亚洲熟女av蜜臀| 免费观看黄片视频在线观看| 十八禁一区二区在线观看| 国产精品日本一区二区三区在线| 亚洲精品黄色在线观看| 日韩高清精品一区二区| 黄色成人av在线网站| 欧美日韩一区二区三区大片| 国产亚洲欧美日韩看国产| 亚洲国产天堂久久综合| 一区二区三区四区四虎| 国产欧美日韩国产精品| 日本中文有码在线观看| 国产成人亚洲欧美激情| 精品不卡一区二区三区| 久热精品视频在线观看| 一区二区精品人妻av| 中文字幕国产成人在线视频| 午夜宅男在线视频观看| 国精品午夜福利视频不卡| 亚洲清纯唯美激情四射| 秋霞日韩欧美一区二区三区| 国产精品熟女亚洲av| 亚洲国产精品成人久久蜜臀|