Android6 0權限機制(一):介紹

本篇文章已授權微信公眾號 hongyangAndroid (鴻洋)獨家發布 Android6.0權限機制(一):介紹 Android6.0權限機制(二):封裝 Android6.0權限機制(三):6.0以前國產手機權限處理

為何google在6.0加入這個權限機制

android6.0之前其實也有權限機制,很簡單就是開發者在manifest.xml注冊,用戶安裝app時候,當做權限清單列出來告知用戶我需要這些個權限,但是這樣用戶基本不會去看,導致app權限濫用造成安全隱患。

權限分類

Android權限有100多種不可能每種都去運行時授權,因此google把權限分為兩類: 1.普通權限:例如網絡請求等,按照老的權限機制 2.危險權限:9種共24個(電話,短信,sd卡,位置,攝像頭,傳感器,日歷,錄音,聯系人),就是我們要動態申請的。 ? 用adb命令查看危險權限列表:(tip:記住9種24類)

adb shell pm list permissions -d -g
復制代碼
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
復制代碼

看到上面的dangerous permissions,會發現一個問題,好像危險權限都是一組一組的那么有個問題:分組對我們的權限機制有什么影響嗎?的確是有影響的,如果app運行在Android 6.x的機器上,對于授權機制是這樣的。如果你申請某個危險的權限,假設你的app早已被用戶授權了同一組的某個危險權限,那么系統會立即授權,而不需要用戶去點擊授權。比如你的app對READ_CONTACTS已經授權了,當你的app申請WRITE_CONTACTS時,系統會直接授權通過。此外,對于申請時彈出的dialog上面的文本說明也是對整個權限組的說明,而不是單個權限(ps:這個dialog是不能進行定制的)。不過需要注意的是,不要對權限組過多的依賴,盡可能對每個危險權限都進行正常流程的申請,因為在后期的版本中這個權限組可能會產生變化。

怎么兼容

1.假設我們的項目之前沒加這個權限機制,那現在我們怎么處理呢,要不要加這個權限判斷,這個取決與app的版本兼容性也就是你們是否愿意為Android6.0以上的用戶們處理這個問題。targetSdkVersion這個屬性就是控制是否要引入權限機制的開關。

  • 項目中targetSdkVersion<23: 按照老的權限機制,只在manifest聲明就可以了,運行不會報錯,但是會有隱患: 比如,我的APP有個撥號功能,把targetSdkVersion=21,安裝到API23(Android6.0)的設備,可以正常撥號,看似正常。 但是用戶可以直接去設置里面關掉權限:

我在模擬器上有這個警告提示,但不保證所有手機都會有這個提示!這時再打開APP就無法撥號了,由于沒有檢查權限,用戶得不到任何提示,一臉懵逼。

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

2.如果app原先的targetSdkVersion低于23,現在升級到targetSdkVersion=23的app,那么里面的權限默認全部開啟!除非用戶卸載重裝這個app,才是默認關閉所有權限

關于讀寫SD卡權限

在6.0之前由于讀寫SD沒有限制,導致sd卡目錄被app濫用,于是google把sd卡續寫權限列為危險權限,如果開發者不想申請sd卡讀寫權限,可以訪問0/Android/data/包名 這個目錄,不需要權限可以隨便訪問,Android也是建議開發者將這個目錄作為app的緩存目錄

使用

  • 首先配置build.gradle,targetSdkVersion版本應該>=23,然后導入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'
}
復制代碼
  • manifest.xml聲明權限
<uses-permission android:name="android.permission.CALL_PHONE"/>
復制代碼
  • 在Activity或者Fragment中判斷是否開啟了這個權限,如果開啟了就撥號,沒有的話就申請權限:

界面彈出框:拒絕或者同意,回調兩種結果:

[圖片上傳中。。。(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,"沒有撥打電話權限",Toast.LENGTH_SHORT).show();}}}private void call(){Intent intent = new Intent();intent.setData(Uri.parse("tel://1212121212"));intent.setAction(Intent.ACTION_CALL);startActivity(intent);}
}
復制代碼
  • 不再提示的處理: 如果用戶勾選了不再提示,并且拒絕了權限,那么后面不會再彈框,并且結果一直回調到沒有權限,此時根據產品需求處理,一般2種方法:
  1. 在回調中彈出Dialog跳到設置界面開啟權限
  2. 直接彈出提示:沒有權限(這種更好),因為用戶就是拒絕了權限,不要煩他了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MAX10 ADC的一些基知識

MAX10 ADC 的一些知識 1、 MAX 10 內部集成的12bit SAR ADC的特點為&#xff1a; a、 采樣速率高達1Mhz. b、 模擬通道多達18個&#xff0c;單個ADC多達17個&#xff0c;雙ADC器件中有16個雙功能ADC通道&#xff0c;2個專用的ADC。 c、 提供單端測…

Blazor University (42)JavaScript 互操作 —— 生命周期和內存泄漏

原文鏈接&#xff1a;https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/lifetimes-and-memory-leaks/生命周期和內存泄漏源代碼[1]如果我們運行我們在從 Javascript 調用 .NET 中創建的應用程序并檢查瀏覽器控制臺窗口&#xff0c;我們會看到…

深入淺出聊布隆過濾器(Bloom Filter)

之前在網上看到過這么一段話&#x1f447; Data structures are nothing different. They are like the bookshelves of your application where you can organize your data. Different data structures will give you different facility and benefits. To properly use the …

第五周作業

本周作業內容&#xff1a;顯示當前系統上root、fedora或user1用戶的默認shell&#xff1b;#egrep "^(root|user1|fedora)" /etc/passwd|cut -d: -f72、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行&#xff0c;形如&#xff1a;hello()&#xff…

我為什么卸載了今日頭條

曾經的自媒體人自述。 兩三年前自媒體熱曾席卷中國互聯網&#xff0c;當時短視頻還不是很火&#xff0c;一般的自媒體人都是以撰寫文章為主&#xff0c;各種微信公眾號層出不窮&#xff0c;10W的俗稱 爆文&#xff08;豹紋&#xff09;。后來以今日頭條為領頭的短視頻自媒體出現…

appium執行iOS測試腳本并發問題

appium1.4.XiOS9.Xxcode7.X: appium1.4.xiOS9.xxcode7.x&#xff0c;這一整套的配置做移動端自動化測試是測試人員常用的測試框架。關于&#xff0c;這一套測試框架的并發問題&#xff1a;基于mac端&#xff0c;啟動多臺appium服務器會導致appium的運行出錯。這是因為多個appiu…

WinForm(五)控件和它的成員

窗體無疑是WinForm的主角&#xff0c;每個窗體都是用一個class來承載&#xff0c;那么窗體的控件&#xff0c;就是類中的私有字段了。每個窗體有三個文件&#xff0c;兩個.cs文件&#xff0c;是一個分部類&#xff0c;Designer.cs是自動生成的C#代碼&#xff0c;一般是拖拽控件…

Atitit.異常處理 嵌套??冗長的解決方案

Atitit.異常處理 嵌套 冗長的解決方案 1. 異常處理的需要改進的地方1 2. 異常設計的初衷是, 在程序中出現錯誤時, 由程序自己處理錯誤, 盡量不要以exit(0)這種粗暴的方式中止程序. 1 3. 正常流程和異常流程的分離。2 4. “是藥三分毒”&#xff0c; 任何事物有缺點&#xff0c…

一文詳解|增長那些事兒

目錄 增長的背景 1.1 增長的定義 1.2 如何判斷事物是否在增長 1.3 如何判斷事物能否持續增長 如何進行增長 2.1 尋找增長機會點&#xff08;人的能力&#xff09; 2.1.1 發散與收劍找機會點 2.1.2 實驗分析驗證 2.1.3 增長洞察提取策略 2.1.4 如何找到大機會 2.2 設…

在MVC項目中使用Ninject

項目結構圖&#xff1a; App_start文件夾中的文件是VS自己創建的&#xff0c;其中NinjectWebCommon類在創建之初并不存在。后面會再次提到&#xff01; 添加一個Home控制器。代碼如下&#xff1a; using EssentialTools.Models; using Ninject; using System; using System.Col…

linux IP、端口連通性測試

ssh -v -p 50001 root10.210.200.82轉載于:https://www.cnblogs.com/kuiyeit/p/6723508.html

緊急通知:360 網站衛士前端公共庫已停止服務

所有使用了360前端公共庫的開發者和站長們&#xff0c;請及時更換你的前端庫的鏈接&#xff08;主要是前端庫和谷歌 fonts&#xff09;&#xff0c;否則網站打開速度會極慢&#xff0c;甚至會在 Chrome 瀏覽器中崩潰。 360前端公共庫曾經提供的服務有&#xff1a; 前端公共庫&a…

一文學會Autofac的基礎操作:幾種實現注冊方式、3種注入方式、生命周期、AOP以及過濾器實現依賴注入...

前言&#xff1a;直接開干。使用Autofac進行服務注冊實踐&#xff1a;新建三個項目&#xff0c;分別是webapi項目 Wesky.Core.Autofac以及兩個類庫項目 Wesky.Core.Interface和Wesky.Core.Service。在Webapi項目下&#xff0c;引用Autofac的三個包&#xff1a;Autofac、Autofac…

解析互聯網廣告術語 CPM、CPC、CPA、CPS、CPL、CPR 是什么意思

1. CPM&#xff08;Cost per mille&#xff09;&#xff0c;每千次展現收費 這是一種最為常見的廣告模式&#xff0c;也是很多網站流量變現的一種途徑&#xff0c;這種廣告不管計算點擊&#xff0c;或者什么注冊下載之類的轉化&#xff0c;只要這個廣告在網站上被正常的展現給…

JavaScript數組迭代方法(圖解)

轉載于:https://www.cnblogs.com/seanna/p/6724032.html

Rider調試ASP.NET Core時報thread not gc-safe的解決方法

新建了一個ASP.NET Core 5.0的Web API項目&#xff0c;當使用斷點調試Host.CreateDefaultBuilder(args)時&#xff0c;進入該函數后查看中間變量的值&#xff0c;報錯Evaluation is not allowed: The thread is not at a GC-safe point。在群里問了也沒人回應&#xff0c;可能沒…

The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;

好像是更新過啥SDK之后&#xff0c;項目一直在包名的那一行顯示紅線&#xff0c;不過是不報編譯錯誤的&#xff0c;就是看著老扎心老扎心的&#xff0c;開始以為是指定的SDK版本的問題&#xff0c;修改后發現無效&#xff0c;最后找到方法解決&#xff1a; 打開SDK Manager ---…

oracle 各種日期函數格式和操作

2019獨角獸企業重金招聘Python工程師標準>>> ORACLE日期時間函數大全 TO_DATE格式(以時間:2007-11-02 13:45:25為例) Year: yy two digits 兩位年 顯示值:07 yyy three digits 三位年 顯示值:00…

火山引擎李玉光:字節跳動大規模K8s集群管理實踐

2022年5月31日&#xff0c;在CSDN云原生系列在線峰會第6期“K8s大規模應用和深度實踐峰會”&#xff0c;火山引擎資深云原生架構師李玉光分享了《字節跳動大規模K8s集群管理實踐》。 字節跳動云原生體系 字節跳動內部云原生技術的使用貫穿組織技術體系各層面&#xff0c;整體如…

(7)關于margin的一些想法2.0

這篇主要討論的就是margin負值與float的關系。 首先&#xff0c;例子。 <!doctype html> <html> <head> <meta charset"utf-8"> <title>無標題文檔</title> <style typetext/css> html,body{padding:0;margin:0;} div{wid…