Android,找到代码中的所有地方以请求权限

时间:2016-02-19 19:57:26

标签: java android android-permissions

我正在开发一个Marshmallow设备的应用程序。源代码不是由我编写的,项目本身也很大。 我目前正在让应用程序在需要时请求权限。

问题是:如何在代码中找到应该请求权限的所有地方? 我正在使用Android Studio。

修改
有些人建议将api更改为23并运行应用程序并查看崩溃的位置。 问题是应用程序不会在每个地方崩溃。

例如,在没有权限的情况下运行此代码会导致应用程序崩溃:

TelephonyManager manager = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);

虽然这个只返回一个空数组,而不是崩溃。

final String[] SELF_PROJECTION = new String[]{
    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,};
Cursor cursor = context.getContentResolver()
    .query(ContactsContract.Profile.CONTENT_URI, SELF_PROJECTION, null, null, null);

此外,Android Lint不显示这些地方。我不确定是否应该这样。

5 个答案:

答案 0 :(得分:5)

根据有关security permissions的开发者页面:

  

但是,几乎在所有情况下,都会在系统日志中打印权限失败。

所以运行应用程序并在日志中搜索"权限"或类似的。

使用单元测试来确保覆盖代码中可能需要权限的所有位置。

答案 1 :(得分:2)

添加

lintOptions {
    enable 'MissingPermission'
}

build.gradle中。这将在您构建应用程序后显示警告。

答案 2 :(得分:1)

当然,编译目标api 23,不要添加权限代码,运行应用程序并查看它崩溃的位置。

一旦你开始精确定位位置,然后打开权限(通过应用程序设置),这样你就可以通过那个屏幕,然后关闭它们,这样你就可以看到它是否崩溃。

Logcat非常具有描述性,让您知道权限被拒绝...

答案 3 :(得分:0)

您可以这样做:从清单中删除危险权限。通过这种方式,您可以在几乎任何设备上进行测试,确定它会崩溃,并且您将找到需要这些权限的确切位置。无论如何,我就是这样做的。

答案 4 :(得分:-4)

首次启动应用时请求所需的所有权限。

它不是最佳做法,但它是此问题的回答