android应用系统权限问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android应用系统权限问题相关的知识,希望对你有一定的参考价值。

使用eclipse开发的应用,androidManifest.xml里面配置如下:
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="20" />
因为targetSdkVersion小于23,按理说在android 6.0的手机上面运行的时候,权限在AndroidManifest.xml里面配置了,那么权限都已经赋予了,不再需要动态申请。并且,在需要使用到WRITE_EXTERNAL_STORAGE权限的时候也去检测了的,显示拥有权限,但是却没有办法在sd卡里面创建文件夹,提示没有权限,功能无法使用。哪位大神了解原因,求助!!
看来是没有人来解答了,就这样吧,以后找到原因了,就去csdn写篇blog。

参考技术A /**
* 广播接收者. 去申请管理员权限. 这个广播接收者需要在清单文件中做一些特殊的配置
*
* <receiver android:name=".MyPolicyReceiver" 你的广播接收者的名字
* android:description="@string/app_name" 给用户的描述
* android:label="@string/app_name" 设备管理器中显示的应用标题名
* android:permission="android.permission.BIND_DEVICE_ADMIN"> 需要申请的权限
* <meta-data
* android:name="android.app.device_admin"
* android:resource="@xml/policy"/> policy.xml中为所声明的设备管理员权限
*
* <intent-filter >
* <action
* android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 监听改频段的广播
* </intent-filter>
* </receiver>
*
* @author
*

通过 adb 列出 Android 应用程序的权限

【中文标题】通过 adb 列出 Android 应用程序的权限【英文标题】:Listing permissions of Android application via adb 【发布时间】:2014-02-01 04:23:40 【问题描述】:

使用 adb,我如何知道 Android 应用程序需要哪些权限?

因为我想在不同的设备上显示多个应用的​​权限,在Google Play或者Settings中查看>Applications manager需要太多的手动操作。

【问题讨论】:

【参考方案1】:

我只是想将 Jason 和 Juuso 的答案结合在一起,并注意到前者列出了授予的权限,而后者列出了请求的权限(包括那些被授予)。

要查看仅授予的权限(但忽略已请求但未授予的权限),请使用

adb shell dumpsys package packagename

并检查输出底部的grantedPermissions 部分。

列出所有权限(已请求但未授予 + 已请求并已授予):

    注意一个包的 APK。您可以运行相同的命令

    adb shell dumpsys package packagename
    

    并从其输出的codePath 元素中获取 APK 路径。

    (如果您的设备/模拟器上没有 aapt)您需要从设备/模拟器中提取 apk,正如 Juuso Ohtonen 在他的回答中指出的那样。所以从你的桌面执行这样的事情:

    adb pull /data/app/com.your.package.apk
    

    列出包的所有权限

    如果设备/模拟器中缺少 aapt,可以在您的 Android SDK 中的 build-tools/&lt;version&gt;/ 下找到。

    然后执行

    aapt d permissions /path/to/com.your.package.apk
    

【讨论】:

说,我注意到“adb shell dumpsys package”命令显示了关于应用程序的多种信息。它还可以显示应用程序正式使用的所有文件夹,例如外部存储(在我的设备上的“/storage/emulated/0/Android/data/PACKAGE_NAME”上)? Grep 高亮是你的朋友adb shell dumpsys package com.example | grep --color -E "granted=true|$"【参考方案2】:

    列出所有应用程序及其安装路径(如果您只对第 3 方应用程序感兴趣,请使用 -3 标志)。例如,让我们尝试找出 YouTube 应用程序的权限。 adb shell pm list packages -f 输出:

    ... 包:/data/app/com.google.android.youtube-1.apk=com.google.android.youtube ...

    从设备中拉取选定的 apk:adb pull /data/app/com.google.android.youtube-1.apk

    使用 aapt d permissions com.google.android.youtube-1.apk

    列出权限

输出:

    uses-permission: android.permission.BROADCAST_STICKY
    uses-permission: android.permission.CALL_PHONE
    uses-permission: android.permission.CALL_PRIVILEGED
    uses-permission: android.permission.WRITE_SETTINGS
    uses-permission: android.permission.WRITE_SECURE_SETTINGS
    uses-permission: android.permission.READ_CONTACTS
    uses-permission: android.permission.READ_CALL_LOG
    uses-permission: android.permission.WRITE_CONTACTS
    uses-permission: android.permission.WRITE_CALL_LOG
    uses-permission: android.permission.SYSTEM_ALERT_WINDOW
    uses-permission: android.permission.INTERNAL_SYSTEM_WINDOW
    uses-permission: android.permission.ADD_SYSTEM_SERVICE
    uses-permission: android.permission.VIBRATE
    uses-permission: android.permission.BLUETOOTH
    uses-permission: android.permission.BLUETOOTH_ADMIN
    uses-permission: android.permission.REORDER_TASKS
    uses-permission: android.permission.CHANGE_CONFIGURATION
    ...

...

【讨论】:

不错的答案,但为什么需要第 2 步?没有它也能正常工作。 @DenisKniazhev aapt 工具未在 adb shell 中提供 @coco_ 你说得对,我一定是在使用预装了aapt的模拟器。【参考方案3】:

快速方法: adb shell dumpsys 包包名 | grep 权限

【讨论】:

这只会列出已授予的权限,请参阅下面的答案 不就是只包含带有“pemission”字样的权限吗? 在 Windows 机器上使用:adb shell "dumpsys package packagename | grep permission"

以上是关于android应用系统权限问题的主要内容,如果未能解决你的问题,请参考以下文章

Android 更新系统应用未获得新权限

用于应用权限的 Android 广播接收器

Android 6 Permissions => 禁用权限并返回应用程序时崩溃

通过 adb 列出 Android 应用程序的权限

Android权限机制

如何在统一构建的 Android 应用中请求权限?