我有两个Android应用程序,一个权限提供程序和一个请求程序。
提供商具有以下清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissionprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<permission android:description="@string/permission_desc"
android:icon="@drawable/ic_launcher"
android:label="some permission"
android:name="com.example.permissionprovider.CUSTOM"
android:protectionLevel="normal" />
<!-- is the below tag required in the provider?-->
<uses-permission android:name="com.example.permissionprovider.CUSTOM"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.permissionprovider.MainActivity"
android:permission="com.example.permissionprovider.CUSTOM"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我希望为可启动活动设置权限是错误的,因为启动器无权启动此活动。这是正确的吗?
提供者的清单是否应声明提供者应用程序需要权限 - com.example.permissionprovider.CUSTOM,还是不需要,因为权限是在同一清单中定义的?
现在我有请求者应用程序,其中包含以下清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissionrequester"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="com.example.permissionprovider.CUSTOM"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.permissionrequester.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
并且请求者尝试启动提供者的活动。
Intent i;
PackageManager manager = getPackageManager();
try {
i = manager.getLaunchIntentForPackage("com.example.permissionprovider");
if (i == null)
throw new PackageManager.NameNotFoundException();
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
} catch (PackageManager.NameNotFoundException e) {
} }
答案 0 :(得分:2)
我希望将权限设置为可启动活动是错误的,因为启动程序无权启动此活动。这是正确的吗?
正确,发射器将无法启动该活动。但是,它仍会出现在启动器中,因此当用户无法启动您的应用时,用户会感到沮丧。
提供者的清单是否应声明提供者应用程序需要权限 - com.example.permissionprovider.CUSTOM,还是不需要,因为权限是在同一清单中定义的?
您可以在两个应用中定义<permission>
,以解决您的上一个问题:
如果首先安装了提供者应用程序,然后是请求者,那么请求者将能够启动提供者的Activity,但如果它是首先安装的请求者,则不会发生这种情况。怎么解决这个问题?
在两个应用中定义<permission>
。
此外,如果您要发布这两个应用,并且没有第三方使用您的提供商,请使用signature
级权限,而不是normal
- 一个。这将阻止除您之外的任何人编写可成功保留权限的应用程序。