1. 程式人生 > >專案中處理android 6.0許可權管理問題

專案中處理android 6.0許可權管理問題

android 6.0對於許可權管理比較收緊,因此在適配android 6.0的時候就很有必要考慮一些許可權管理的問題。

如果你沒適配6.0的裝置並且許可權沒給的話,就會出現類似如下的問題:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{b83b87a 16850
:com.chexiu.sales/u0a34} (pid=16850, uid=10034) with revoked permission android.permission.CALL_PHONE

google官方許可權分類:

如下為正常的許可權:

ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS

如下為危險許可權:

group:android.permission-group.CONTACTS
  permission:android.permission.WRITE_CONTACTS
  permission:android.permission.GET_ACCOUNTS
  permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
  permission:android.permission.READ_CALL_LOG
  permission:android.permission.READ_PHONE_STATE
  permission:android.permission.CALL_PHONE
  permission:android.permission.WRITE_CALL_LOG
  permission:android.permission.USE_SIP
  permission:android.permission.PROCESS_OUTGOING_CALLS
  permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission
-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA permission:android.permission.CAMERA group:android.permission-group.SENSORS permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.WRITE_EXTERNAL_STORAGE group:android.permission-group.MICROPHONE permission:android.permission.RECORD_AUDIO group:android.permission-group.SMS permission:android.permission.READ_SMS permission:android.permission.RECEIVE_WAP_PUSH permission:android.permission.RECEIVE_MMS permission:android.permission.RECEIVE_SMS permission:android.permission.SEND_SMS permission:android.permission.READ_CELL_BROADCASTS

那麼問題來了,因為這些危險許可權導致app在6.0上面崩潰就不應該,所以要找好的方法來解決問題:

庫的地址:https://github.com/mylhyl/AndroidAcp

專案中的整合和使用:

1,gradle整合:

compile 'com.mylhyl:acp:1.1.5'

2,程式碼整合進來,方便修改

我採用2的方式

然後看下實際專案中的使用:

比如針對撥打電話許可權的6.0適配:

  /**
     * 直接撥打電話
     */
    public static boolean intentToCall(final Context context, final String phoneNumber) {
        if (context == null || StringUtil.isEmpty(phoneNumber)) {
            return false;
        }
        //6.0許可權處理
        Acp.getInstance(context).request(new AcpOptions.Builder().setPermissions(
            Manifest.permission.CALL_PHONE).build(), new AcpListener() {
            @Override public void onGranted() {
                Uri u = Uri.parse("tel:" + phoneNumber);
                Intent it = new Intent(Intent.ACTION_CALL, u);
                context.startActivity(it);
            }


            @Override public void onDenied(List<String> permissions) {

            }
        });

        return true;
    }

鏈式呼叫,提供授權和授權失敗兩種情況處理

如果提供許可權會呼叫onGranted(){}方法,你只需要在裡面新增授權後的操作就行。

如果授權失敗會呼叫onDenied(){}方法,你可以提醒使用者授權失敗,並進行後續操作。

並且該庫具有如下特點:

  • 支援批量許可權申請,不需要重寫 onRequestPermissionsResult 方法,Activity 與 Fragment 中用法一致,一句話搞定。
  • 處理許可權拒絕,或勾選不再詢問,導致不能正常使用功能的提示框,支援跳轉設定許可權介面開啟許可權,所有提示框文字可自定義。
  • 相容小米跳轉許可權設定
  • 增加M版本檢測

當然建議程式碼整合到專案中來,後期萬一修改也比較方便。

相關推薦

專案處理 android 6.0 許可權管理問題

android 6.0對於許可權管理比較收緊,因此在適配android 6.0的時候就很有必要考慮一些許可權管理的問題。 如果你沒適配6.0的裝置並且許可權沒給的話,就會出現類似如下的問題: java.lang.SecurityException: Permission Denial: starting I

專案處理android 6.0許可權管理問題

android 6.0對於許可權管理比較收緊,因此在適配android 6.0的時候就很有必要考慮一些許可權管理的問題。 如果你沒適配6.0的裝置並且許可權沒給的話,就會出現類似如下的問題: java.lang.SecurityException: Permission Denial: startin

android 6.0許可權管理

轉載 https://blog.csdn.net/android2me/article/details/69525975 private void checkPermission() { //檢查許可權(NEED_PERMISSION)是否被授權 PackageManager.

Android 6.0許可權管理以及動態申請,以定位許可權為例

前言: 我們都知道現在手機系統已經到了很高的版本,在我們的Android6.0以後很多許可權都被列入危險許可權,都需要使用者手動去確認 1.我們先來看一下6.0以後被列為危險級別的一些許可權

Android開發——Android 6.0許可權管理機制詳解

0.前言最近在研究所實習,我負責維護Android手機取證專案的Android客戶端,有客戶反映我們的APP在Android6.0無響應,經過除錯發現SD卡讀寫許可權許可權被拒絕。但明明是在AndroidManifest.xml檔案中宣告過的。查了很多資料才知道Android

Android 6.0許可權管理及其封裝

前言 Android M出來很久了,N都快釋出了,儘管如此還是要整理一下這塊。6.0的許可權機制變更為Runtime Permissions,執行時要請求許可權,如果使用者不授權的話,可能會導致崩潰。 本篇文章分三部分,一是許可權的分類,二是執行時請求的基本

高德地圖安卓6.0許可權處理方案

package com.amap.location.demo; import java.util.ArrayList; import java.util.List; import android.Manifest; import android.app.Ac

Android——Android 6.0 許可權申請機制處理

Android 6.0帶來了新的許可權管理方式,預設情況下沒有任何應用有許可權去執行對其他應用、作業系統、使用者有不利影響的操作,這涉及到android 6.0的 Security Architecture(安全體系結構),也是Android安全體系結構的核心,

android 6.0許可權問題處理的核心程式碼--shouldShowRequestPermissionRationale正確用法

private void requestPermission(String[] permissions) { boolean isMinSdkM = Build.VERSION.SDK_INT < Build.VERSION_CODES.M; if (

Android 啟動系統相機,相簿,裁剪圖片及6.0許可權管理

在日常開發中,我們經常需要用到上傳圖片的 功能,這個時候通常有兩種做法,第一種,從相機獲取,第二種,從相簿獲取。今天這篇部落格主要講解利用系統的Intent怎樣獲取? 主要內容如下 - 怎樣通過相機獲取我們的圖片 - 怎樣啟動相簿獲取我們想要的圖片 -

android 6.0 + 許可權之 打電話

下面看看我怎麼調出去的… 第一步,我們還是要在AndroidManifolest.xml裡面新增 如果你沒有判斷請求許可權會報以下錯誤 AndroidRuntime: FATAL EXCEPTION: main Process: com.example.jie.demo, PI

android 6.0許可權,onRequestPermissionsResult回撥不執行問題

許可權是目前APP必不可少的,這裡介紹一下onRequestPermissionsResult回撥不執行問題。 一,正常使用android 6.0許可權: 思路: 1.檢查判斷 如果應用具有此許可權,方法將返回PackageManager.PERMISSION_GRA

android 6 0許可權全面詳細分析和解決方案

原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/48371123 http://inthecheesefactory.com/blog/things-y

Android 6.0許可權機制及開發流程詳解

許可權機制變更的背景 在Android6.0之前,app在安裝時會提示使用者此app需要使用哪些許可權,但使用者只能選擇同意或拒絕安裝,而不能單獨對某項許可權進行授予或拒絕。只要使用者選擇了安裝,即表示使用者接受了app對這些許可權的使用,如果使用者不希望app獲取某些涉及隱

android 6.0許可權判斷 音訊 拍照 相簿

/*------------------------------------------開啟音訊許可權------------------------------------------------*/ if (PackageManager.PERMISSION_GRANT

Android 6.0 許可權的申請 與 封裝

Android 6.0 以後最大的改變就是對於許可權的管理這一塊了,以前某個App 想使用什麼許可權 只要在 manifest 檔案裡面新增申請就可以了。 Android 6.0 以後不但要在manifest 裡面新增執行的時候還會彈出一個對話方塊讓使用

android 6.0許可權全面詳細分析和解決方案

原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/48371123 http://inthecheesefactory.com/blog

Activity原始碼之Android 6.0許可權相關完全解析

我們都知道Android6.0以前許可權的申請非常簡單,只需要在mainfest宣告所需的許可權即可。而6.0以後,Android將許可權的管理進一步嚴格化,它要求使用者在使用某些敏感許可權時,必須在mainfest中先宣告之後再動態申請。在一定程度上約束了

android 6.0許可權動態申請

android M 的名字官方剛釋出不久,最終正式版即將來臨! android在不斷髮展,最近的更新 M 非常不同,一些主要的變化例如執行時許可權將有顛覆性影響。驚訝的是android社群鮮有談論這事兒,儘管這事很重要或許在不遠的將來會引發很嚴重的問題。 這是今天我寫

android 6.0許可權開發---拍照,開啟相簿問題

android6.0的許可權機制改得跟ios類似,兩個系統之間互相模仿也是好事,取長補短。在某些許可權需要用到的時候,要先詢問使用者。 國內各大android系統對於許可權的設定機制都不大一樣,但大部分都是一些常用的許可權預設是開啟的,一些是預設關閉了,即使你在Andr