2012-03-22 56 views
0

我有2个应用 “A” 和 “B”活动启动,即使它有标签的android:的ProtectionLevel = “签名”

应用 “A” 与C_B签署证书C_A和 “B”

在 “A”

<activity android:name=".ActivityA" android:protectionLevel="signature" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="com.temp.packagea" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
在应用程序 “B”

 Intent i = new Intent(); 
     i.setAction("com.temp.package"); 
     startActivity(i); 

和的问题是,应用程序A启动而不含p来自应用程序B的roblems。

如何保护我的应用程序中使用与我的签名相同的签名的应用程序中的开始活动。

回答

2

protectionLevel对于清单中的Activity标记不是有效的属性。 protectionLevel标签适用于<permission>元素,并在应用程序指定新权限(不是默认的Android系统权限之一)时使用。

它看起来像你试图阻止应用程序调用Activity(在你的例子中是A),如果它们没有用包含应用程序的相同证书进行签名。您想要在此处执行的操作是使用<permission>元素在清单(包含A的应用程序的清单)中声明新权限,并将新许可的protectionLevel设置为Signature。然后,在Activity的清单声明中,使用android:permission属性,以便启动Activity需要此新权限。对于您希望能够调用Activity的任何其他应用程序,只需在该其他应用程序的清单中添加一个uses-permission元素并指定您创建的新权限即可。由于该权限为Signature权限,系统将在安装新应用程序时自动授予该权限。

+0

尼斯解释! ! – John 2015-08-22 16:22:42

0

android:protectionLevel上的用法错误,应将其放入权限节点中。

+0

你的意思是这样\t <许可的android:NAME = “com.temp.asd” \t \t安卓的ProtectionLevel = “签名”/>?,我试过但仍无法正常工作 – Lukap 2012-03-22 10:41:34