Android 应用程序调试 apk 在某些设备上不要求权限
Android app debug apk does not ask for permissions on some devices
在某些设备上,应用程序在侧载时会正确请求权限。在其他 (Android 6.0) 上,它在侧载时根本不询问权限。权限列在 manifest.xml(下方)中,并且对某些设备(Android 5.0)完美工作。在其他设备(Android 4.0、6.0.1)上,它会按应有的方式询问权限,但似乎并没有包含所有权限。下面的弹出窗口是单击发送短信按钮时发生的情况的示例。
我只进行了有限的测试,问题似乎略有不同,具体取决于设备 运行 的 android 版本。话虽这么说,它可能源于不同的东西,我不知道。
有谁知道为什么会这样?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.catalizeapp.catalize_ss25">
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="Catalize"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LoginActivity"
android:label="Catalize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value="Contacts" />
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity android:name=".Contacts" />
<activity android:name=".Account"
android:theme="@style/SuperCoolAppBarActivity"/>
<meta-data android:name = "android.support.PARENT_ACTIVITY"
android:value= ".Contacts"/>
<activity android:name=".ReportBug">
<meta-data android:name = "android.support.PARENT_ACTIVITY"
android:value=".Contacts"/>
</activity>
</application></manifest>
根据文档:
如果设备是 运行ning Android 6.0 或更高版本,并且您应用的目标 SDK 是 23 或更高版本:应用必须在清单中列出权限,并且必须请求每个应用 运行ning 时需要危险权限。用户可以授予或拒绝每项权限,即使用户拒绝权限请求,应用也可以继续 运行 并具有有限的功能。
这就是为什么尽管您已经在清单文件中声明了权限,但您仍然需要在 运行 时请求它们。
作为解决方法,您可以设置 minSdkVersion < 23,但也如文档所述:
注意:从 Android 6.0(API 级别 23)开始,用户可以随时撤销任何应用程序的权限,即使该应用程序的目标 API 级别较低。您应该测试您的应用程序,以验证它在缺少所需权限时是否正常运行,无论您的应用程序面向哪个 API 级别。
此外,根据权限最佳实践,您应该针对两种权限模型进行测试,以提供更好的用户体验。
在某些设备上,应用程序在侧载时会正确请求权限。在其他 (Android 6.0) 上,它在侧载时根本不询问权限。权限列在 manifest.xml(下方)中,并且对某些设备(Android 5.0)完美工作。在其他设备(Android 4.0、6.0.1)上,它会按应有的方式询问权限,但似乎并没有包含所有权限。下面的弹出窗口是单击发送短信按钮时发生的情况的示例。
我只进行了有限的测试,问题似乎略有不同,具体取决于设备 运行 的 android 版本。话虽这么说,它可能源于不同的东西,我不知道。
有谁知道为什么会这样?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.catalizeapp.catalize_ss25">
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="Catalize"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LoginActivity"
android:label="Catalize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value="Contacts" />
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity android:name=".Contacts" />
<activity android:name=".Account"
android:theme="@style/SuperCoolAppBarActivity"/>
<meta-data android:name = "android.support.PARENT_ACTIVITY"
android:value= ".Contacts"/>
<activity android:name=".ReportBug">
<meta-data android:name = "android.support.PARENT_ACTIVITY"
android:value=".Contacts"/>
</activity>
</application></manifest>
根据文档:
如果设备是 运行ning Android 6.0 或更高版本,并且您应用的目标 SDK 是 23 或更高版本:应用必须在清单中列出权限,并且必须请求每个应用 运行ning 时需要危险权限。用户可以授予或拒绝每项权限,即使用户拒绝权限请求,应用也可以继续 运行 并具有有限的功能。 这就是为什么尽管您已经在清单文件中声明了权限,但您仍然需要在 运行 时请求它们。
作为解决方法,您可以设置 minSdkVersion < 23,但也如文档所述:
注意:从 Android 6.0(API 级别 23)开始,用户可以随时撤销任何应用程序的权限,即使该应用程序的目标 API 级别较低。您应该测试您的应用程序,以验证它在缺少所需权限时是否正常运行,无论您的应用程序面向哪个 API 级别。 此外,根据权限最佳实践,您应该针对两种权限模型进行测试,以提供更好的用户体验。