自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開發(fā)者須知:Android M 的權(quán)限機(jī)制

移動(dòng)開發(fā) Android
新的權(quán)限模式之下,用戶將能夠根據(jù)自己的實(shí)際需要在運(yùn)行時(shí)中對(duì)各項(xiàng)權(quán)限進(jìn)行審核,且隨時(shí)關(guān)閉其中的部分權(quán)限。在今天的文章中,我們將共同了解如何處理權(quán)限機(jī)制中出現(xiàn)在新型變更,并掌握它們給開發(fā)人員乃至用戶使用體驗(yàn)帶來的實(shí)際影響。

內(nèi)容簡(jiǎn)介

在Android M版本發(fā)布之前,Android系統(tǒng)中的權(quán)限模式一直采取較為簡(jiǎn)單粗暴的處理方式——即在安裝之時(shí)由用戶作出全部允許或者全不允許的二元選擇。這意味著如果用戶希望使用某款應(yīng)用程序,則首先需要接受其中包含的全部權(quán)限要求或者干脆放棄安裝。這就導(dǎo)致很多開發(fā)人員的編程成果在安裝之時(shí)就被用戶所棄用,根本無法真正實(shí)現(xiàn)用戶與開發(fā)者間的信任關(guān)系乃至其它隱私保障手段。

而在新的權(quán)限模式之下,用戶將能夠根據(jù)自己的實(shí)際需要在運(yùn)行時(shí)中對(duì)各項(xiàng)權(quán)限進(jìn)行審核,且隨時(shí)關(guān)閉其中的部分權(quán)限。在今天的文章中,我們將共同了解如何處理權(quán)限機(jī)制中出現(xiàn)在新型變更,并掌握它們給開發(fā)人員乃至用戶使用體驗(yàn)帶來的實(shí)際影響。

值得強(qiáng)調(diào)的是,這篇文章是在Android M正式版本發(fā)布之前所寫成,因此其中一部分信息可能在未來出現(xiàn)變動(dòng)。

1. 哪些部分要求對(duì)應(yīng)權(quán)限?

盡管Android M仍然要求開發(fā)者在AndroidManifest.xml當(dāng)中進(jìn)行權(quán)限聲明,但用戶現(xiàn)在已經(jīng)能夠在運(yùn)行時(shí)當(dāng)中對(duì)應(yīng)用所使用的權(quán)限進(jìn)行審核或者撤銷。在這套Android新版本當(dāng)中,最重要的變動(dòng)就是android.permission.INTERNET與android.permission.WRITE_EXTERNAL_STORAGE已經(jīng)從危險(xiǎn)評(píng)級(jí)恢復(fù)到了普通等級(jí)。這意味著我們用不著再使用之前針對(duì)這二者向用戶提出申請(qǐng)。

在發(fā)出權(quán)限審核請(qǐng)求時(shí),用戶將需要根據(jù)權(quán)限組對(duì)其提供授權(quán),而非對(duì)組內(nèi)的各單獨(dú)權(quán)限作出審核。這意味著如果我們的應(yīng)用程序需要同時(shí)發(fā)送及收取短信消息,那么用戶只需要批準(zhǔn)短信權(quán)限組即可。下面這份列表為Android M開發(fā)者預(yù)覽版2當(dāng)中能夠從系統(tǒng)設(shè)置中直接查看到的各受支持權(quán)限組。

另外需要注意的是,Android是一套強(qiáng)大的Intent系統(tǒng),它允許開發(fā)人員獲取來自其它應(yīng)用程序的數(shù)據(jù)。相較于申請(qǐng)攝像頭使用權(quán)限并開發(fā)出一款能夠使用Camera API的應(yīng)用,大家現(xiàn)在可以要求用戶利用現(xiàn)有受信拍照應(yīng)用拍攝一幅圖像,從而幫助自己的應(yīng)用程序獲取所需之圖像素材。這些與攝像頭相關(guān)的權(quán)限將由拍照應(yīng)用負(fù)責(zé)處理,而非應(yīng)用程序本身。

2. 如何要求獲取權(quán)限?

當(dāng)大家需要使用某項(xiàng)要求權(quán)限審核機(jī)制的功能時(shí),系統(tǒng)會(huì)執(zhí)行一系列事件流程。我們首先需要查看該權(quán)限是否已經(jīng)為用戶所允許。

如果用戶此前尚未批準(zhǔn)這項(xiàng)權(quán)限,那么大家可以通過權(quán)限請(qǐng)求對(duì)話框的形式向用戶作出提示。在***彈出權(quán)限請(qǐng)求對(duì)話框時(shí),用戶需要在拒絕與接受二者之間作出選擇。

不過如果用戶此前已經(jīng)拒絕了相關(guān)權(quán)限的請(qǐng)求,并再次面對(duì)同樣的請(qǐng)求,這時(shí)他們將看到額外的選項(xiàng)——即永遠(yuǎn)停止顯示此類權(quán)限請(qǐng)求詢問。

大家可以在請(qǐng)求某項(xiàng)權(quán)限之前通過調(diào)用checkSelfPermission來檢查用戶此前是否已經(jīng)通過了該權(quán)限授權(quán)。這項(xiàng)方法會(huì)根據(jù)權(quán)限是否得到批準(zhǔn)而返回一個(gè)int值。

如果返回結(jié)果為PackageManager.PERMISSION_GRANTED,那么大家可以繼續(xù)根據(jù)既定設(shè)計(jì)思路推進(jìn)。不過如果該權(quán)限此前尚未得到批準(zhǔn),那么我們需要利用requestPermissions向用戶發(fā)出請(qǐng)求,利用一個(gè)權(quán)限字符串?dāng)?shù)組進(jìn)行傳遞,并利用一段自定義int請(qǐng)求代碼對(duì)應(yīng)用的邏輯流程進(jìn)行追蹤。

  1.  int hasLocationPermission = checkSelfPermission( Manifest.permission.ACCESS_FINE_LOCATION ); 
  2. int hasSMSPermission = checkSelfPermission( Manifest.permission.SEND_SMS ); 
  3. List<String> permissions = new ArrayList<String>(); 
  4. if( hasLocationPermission != PackageManager.PERMISSION_GRANTED ) { 
  5.     permissions.add( Manifest.permission.ACCESS_FINE_LOCATION ); 
  6.   
  7. if( hasSMSPermission != PackageManager.PERMISSION_GRANTED ) { 
  8.     permissions.add( Manifest.permission.SEND_SMS ); 
  9.   
  10. if( !permissions.isEmpty() ) { 
  11.     requestPermissions( permissions.toArray( new String[permissions.size()] ), REQUEST_CODE_SOME_FEATURES_PERMISSIONS ); 

在requestPermissions被調(diào)用之后,用戶則會(huì)看到一個(gè)對(duì)話框,其中包含應(yīng)用程序所需權(quán)限項(xiàng)目之權(quán)限組提示。這是請(qǐng)求必需權(quán)限的***實(shí)踐方式,現(xiàn)在大家***不要在應(yīng)用***啟動(dòng)時(shí)一次性要求用戶接受全部對(duì)應(yīng)權(quán)限。

當(dāng)用戶點(diǎn)選了對(duì)話框中的選項(xiàng)之后,我們接下來要調(diào)用onRequestPermissionsResult并在Activity當(dāng)中進(jìn)行訪問。通過這種方式,我們的應(yīng)用程序?qū)⒛軌蛟谟脩艟芙^了一項(xiàng)或者多項(xiàng)權(quán)限請(qǐng)求之后繼續(xù)運(yùn)行剩余部分功能。

以下代碼顯示了我們?cè)撊绾卧谀稠?xiàng)權(quán)限被批準(zhǔn)或者拒***對(duì)結(jié)果進(jìn)行查詢。如果用戶拒絕了我們提出的必要權(quán)限申請(qǐng),大家應(yīng)當(dāng)禁用對(duì)應(yīng)的功能并允許用戶了解其為何無法在應(yīng)用程序當(dāng)中正常生效。

  1. @Override 
  2. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
  3.     switch ( requestCode ) { 
  4.         case REQUEST_CODE_SOME_FEATURES_PERMISSIONS: { 
  5.             for( int i = 0; i < permissions.length; i++ ) { 
  6.                 if( grantResults[i] == PackageManager.PERMISSION_GRANTED ) { 
  7.                     Log.d( "Permissions", "Permission Granted: " + permissions[i] ); 
  8.                 } else if( grantResults[i] == PackageManager.PERMISSION_DENIED ) { 
  9.                     Log.d( "Permissions", "Permission Denied: " + permissions[i] ); 
  10.                 } 
  11.             } 
  12.         } 
  13.         break; 
  14.         default: { 
  15.             super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
  16.         } 
  17.     } 

3.  Android M當(dāng)中的遺留應(yīng)用

盡管針對(duì)Android M開發(fā)而成的應(yīng)用程序必須采用新型權(quán)限對(duì)話框與相關(guān)實(shí)現(xiàn)方法,但面向早期Android版本構(gòu)建的應(yīng)用仍然會(huì)在安裝時(shí)直接向用戶顯示權(quán)限列表并要求一次性接受或拒絕。不過在Android M當(dāng)中,用戶完全可以在作出選擇之后隨時(shí)對(duì)相關(guān)權(quán)限進(jìn)行調(diào)用。

由于負(fù)責(zé)處理權(quán)限調(diào)用任務(wù)的底層結(jié)構(gòu)并不適用于面向早期Android版本的應(yīng)用程序,所以當(dāng)相關(guān)權(quán)限未被接受時(shí),任何要求配合相關(guān)權(quán)限的功能都會(huì)返回null、0或者空值。這有可能導(dǎo)致應(yīng)用程序出現(xiàn)意料之外的行為,因此建議各位開發(fā)人員對(duì)自己的原有應(yīng)用程序進(jìn)行升級(jí),以確保其盡早支持Android M中的全新權(quán)限模式。

總結(jié)陳詞

在今天的文章中,大家已經(jīng)了解了新型Android M權(quán)限模式以及如何在自己的應(yīng)用程序當(dāng)中為其提供支持。我們還探討了如何調(diào)整針對(duì)早期版本系統(tǒng)開發(fā)的應(yīng)用程序,以確保其能夠與Android新版本順暢協(xié)作。利用這些信息,大家應(yīng)該能夠保證自己的應(yīng)用程序做好迎接Android下一代重要版本更新的各項(xiàng)準(zhǔn)備。

責(zé)任編輯:chenqingxiang 來源: 51CTO
相關(guān)推薦

2015-07-20 09:16:42

iOSWatchKit開發(fā)

2014-09-01 09:53:50

Android框架

2015-08-11 11:01:22

設(shè)計(jì)原則開發(fā)者

2014-08-08 13:27:34

Android LAndroid開發(fā)

2015-09-18 08:41:12

androidM權(quán)限

2015-08-31 09:41:38

androidM權(quán)限

2014-05-27 13:48:34

開發(fā)者付費(fèi)

2015-07-13 09:43:15

Android M漏洞

2015-06-15 10:57:34

開發(fā)者2015移動(dòng)開發(fā)

2019-05-30 08:00:00

2014-05-04 10:58:19

開發(fā)者廣告

2010-07-29 09:36:11

Android開發(fā)防盜版機(jī)制

2022-10-25 18:46:36

JavaScript

2010-07-28 14:21:43

Flex

2015-06-09 05:26:20

iOSOS XWWDC

2013-07-18 09:42:23

2012-06-13 01:23:30

開發(fā)者程序員

2015-06-25 10:56:53

索尼Android M

2012-03-23 13:31:14

Windows Pho

2013-04-02 09:23:37

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)