日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android6 0权限机制(一):介绍

發(fā)布時(shí)間:2023/12/6 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android6 0权限机制(一):介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇文章已授權(quán)微信公眾號(hào) hongyangAndroid (鴻洋)獨(dú)家發(fā)布 Android6.0權(quán)限機(jī)制(一):介紹 Android6.0權(quán)限機(jī)制(二):封裝 Android6.0權(quán)限機(jī)制(三):6.0以前國產(chǎn)手機(jī)權(quán)限處理

為何google在6.0加入這個(gè)權(quán)限機(jī)制

android6.0之前其實(shí)也有權(quán)限機(jī)制,很簡(jiǎn)單就是開發(fā)者在manifest.xml注冊(cè),用戶安裝app時(shí)候,當(dāng)做權(quán)限清單列出來告知用戶我需要這些個(gè)權(quán)限,但是這樣用戶基本不會(huì)去看,導(dǎo)致app權(quán)限濫用造成安全隱患。

權(quán)限分類

Android權(quán)限有100多種不可能每種都去運(yùn)行時(shí)授權(quán),因此google把權(quán)限分為兩類: 1.普通權(quán)限:例如網(wǎng)絡(luò)請(qǐng)求等,按照老的權(quán)限機(jī)制 2.危險(xiǎn)權(quán)限:9種共24個(gè)(電話,短信,sd卡,位置,攝像頭,傳感器,日歷,錄音,聯(lián)系人),就是我們要?jiǎng)討B(tài)申請(qǐng)的。 ? 用adb命令查看危險(xiǎn)權(quán)限列表:(tip:記住9種24類)

adb shell pm list permissions -d -g 復(fù)制代碼Dangerous Permissions:group:android.permission-group.CONTACTSpermission:android.permission.WRITE_CONTACTSpermission:android.permission.GET_ACCOUNTSpermission:android.permission.READ_CONTACTSgroup:android.permission-group.PHONEpermission:android.permission.READ_CALL_LOGpermission:android.permission.READ_PHONE_STATEpermission:android.permission.CALL_PHONEpermission:android.permission.WRITE_CALL_LOGpermission:android.permission.USE_SIPpermission:android.permission.PROCESS_OUTGOING_CALLSpermission:com.android.voicemail.permission.ADD_VOICEMAILgroup:android.permission-group.CALENDARpermission:android.permission.READ_CALENDARpermission:android.permission.WRITE_CALENDARgroup:android.permission-group.CAMERApermission:android.permission.CAMERAgroup:android.permission-group.SENSORSpermission:android.permission.BODY_SENSORSgroup:android.permission-group.LOCATIONpermission:android.permission.ACCESS_FINE_LOCATIONpermission:android.permission.ACCESS_COARSE_LOCATIONgroup:android.permission-group.STORAGEpermission:android.permission.READ_EXTERNAL_STORAGEpermission:android.permission.WRITE_EXTERNAL_STORAGEgroup:android.permission-group.MICROPHONEpermission:android.permission.RECORD_AUDIOgroup:android.permission-group.SMSpermission:android.permission.READ_SMSpermission:android.permission.RECEIVE_WAP_PUSHpermission:android.permission.RECEIVE_MMSpermission:android.permission.RECEIVE_SMSpermission:android.permission.SEND_SMSpermission:android.permission.READ_CELL_BROADCASTS 復(fù)制代碼

看到上面的dangerous permissions,會(huì)發(fā)現(xiàn)一個(gè)問題,好像危險(xiǎn)權(quán)限都是一組一組的那么有個(gè)問題:分組對(duì)我們的權(quán)限機(jī)制有什么影響嗎?的確是有影響的,如果app運(yùn)行在Android 6.x的機(jī)器上,對(duì)于授權(quán)機(jī)制是這樣的。如果你申請(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)。比如你的app對(duì)READ_CONTACTS已經(jīng)授權(quán)了,當(dāng)你的app申請(qǐng)WRITE_CONTACTS時(shí),系統(tǒng)會(huì)直接授權(quán)通過。此外,對(duì)于申請(qǐng)時(shí)彈出的dialog上面的文本說明也是對(duì)整個(gè)權(quán)限組的說明,而不是單個(gè)權(quán)限(ps:這個(gè)dialog是不能進(jìn)行定制的)。不過需要注意的是,不要對(duì)權(quán)限組過多的依賴,盡可能對(duì)每個(gè)危險(xiǎn)權(quán)限都進(jìn)行正常流程的申請(qǐng),因?yàn)樵诤笃诘陌姹局羞@個(gè)權(quán)限組可能會(huì)產(chǎn)生變化。

怎么兼容

1.假設(shè)我們的項(xiàng)目之前沒加這個(gè)權(quán)限機(jī)制,那現(xiàn)在我們?cè)趺刺幚砟?#xff0c;要不要加這個(gè)權(quán)限判斷,這個(gè)取決與app的版本兼容性也就是你們是否愿意為Android6.0以上的用戶們處理這個(gè)問題。targetSdkVersion這個(gè)屬性就是控制是否要引入權(quán)限機(jī)制的開關(guān)。

  • 項(xiàng)目中targetSdkVersion<23: 按照老的權(quán)限機(jī)制,只在manifest聲明就可以了,運(yùn)行不會(huì)報(bào)錯(cuò),但是會(huì)有隱患: 比如,我的APP有個(gè)撥號(hào)功能,把targetSdkVersion=21,安裝到API23(Android6.0)的設(shè)備,可以正常撥號(hào),看似正常。 但是用戶可以直接去設(shè)置里面關(guān)掉權(quán)限:

我在模擬器上有這個(gè)警告提示,但不保證所有手機(jī)都會(huì)有這個(gè)提示!這時(shí)再打開APP就無法撥號(hào)了,由于沒有檢查權(quán)限,用戶得不到任何提示,一臉懵逼。

  • targetSdkVersion>=23: 這時(shí)就需要在代碼中檢查權(quán)限了,否則打開app去執(zhí)行需要權(quán)限的操作會(huì)崩潰。如果關(guān)閉權(quán)限將會(huì)彈出提示框提示你開啟權(quán)限。

2.如果app原先的targetSdkVersion低于23,現(xiàn)在升級(jí)到targetSdkVersion=23的app,那么里面的權(quán)限默認(rèn)全部開啟!除非用戶卸載重裝這個(gè)app,才是默認(rèn)關(guān)閉所有權(quán)限

關(guān)于讀寫SD卡權(quán)限

在6.0之前由于讀寫SD沒有限制,導(dǎo)致sd卡目錄被app濫用,于是google把sd卡續(xù)寫權(quán)限列為危險(xiǎn)權(quán)限,如果開發(fā)者不想申請(qǐng)sd卡讀寫權(quán)限,可以訪問0/Android/data/包名 這個(gè)目錄,不需要權(quán)限可以隨便訪問,Android也是建議開發(fā)者將這個(gè)目錄作為app的緩存目錄

使用

  • 首先配置build.gradle,targetSdkVersion版本應(yīng)該>=23,然后導(dǎo)入support-v4包:
apply plugin: 'com.android.application'android {compileSdkVersion 23buildToolsVersion "25.0.2"defaultConfig {applicationId "com.example.carmelo.myapplication"minSdkVersion 19targetSdkVersion 23versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled false}}} dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:support-v4:23.2.1' } 復(fù)制代碼
  • manifest.xml聲明權(quán)限
<uses-permission android:name="android.permission.CALL_PHONE"/> 復(fù)制代碼
  • 在Activity或者Fragment中判斷是否開啟了這個(gè)權(quán)限,如果開啟了就撥號(hào),沒有的話就申請(qǐng)權(quán)限:

界面彈出框:拒絕或者同意,回調(diào)兩種結(jié)果:

[圖片上傳中。。。(2)]

public class MyActivity extends Activity {private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity);btn = (Button) findViewById(R.id.textView);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int check = ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.CALL_PHONE);if(check== PackageManager.PERMISSION_GRANTED){call();}else {ActivityCompat.requestPermissions(MyActivity.this,new String[]{Manifest.permission.CALL_PHONE}, 1);}}});}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if(requestCode==1){if(grantResults[0]==PackageManager.PERMISSION_GRANTED){call();}else {Toast.makeText(MyActivity.this,"沒有撥打電話權(quán)限",Toast.LENGTH_SHORT).show();}}}private void call(){Intent intent = new Intent();intent.setData(Uri.parse("tel://1212121212"));intent.setAction(Intent.ACTION_CALL);startActivity(intent);} } 復(fù)制代碼
  • 不再提示的處理: 如果用戶勾選了不再提示,并且拒絕了權(quán)限,那么后面不會(huì)再彈框,并且結(jié)果一直回調(diào)到?jīng)]有權(quán)限,此時(shí)根據(jù)產(chǎn)品需求處理,一般2種方法:
  • 在回調(diào)中彈出Dialog跳到設(shè)置界面開啟權(quán)限
  • 直接彈出提示:沒有權(quán)限(這種更好),因?yàn)橛脩艟褪蔷芙^了權(quán)限,不要煩他了
  • 總結(jié)

    以上是生活随笔為你收集整理的Android6 0权限机制(一):介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。