Swa*_* EP 111 permissions android securityexception denied
我创建了一个包含GWVectraNotifier活动的应用程序,该活动从其他应用程序调用以显示通知.
在"通知"对话框中,将显示"显示"按钮和"关闭"按钮.
单击"显示"按钮,将启动相应的活动.
要检查上述应用程序的功能,
我在checkmail事件触发器上从K9Mail应用程序启动了GWVectraNotifier活动.
我能够成功启动GWVectraNotifier活动,但是点击'show'按钮我将不得不启动K9mail的'MessageList'活动.为此,我编写了以下代码:
Intent i = new Intent();
i.setComponent(new ComponentName("com.fsck.k9", "com.fsck.k9.activity.MessageList"));
i.putExtra("account", accUuid);
i.putExtra("folder", accFolder);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
抛出:
WARN/ActivityManager(59): Permission denied: checkComponentPermission() reqUid=10050
WARN/ActivityManager(59): Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): at android.os.Parcel.readException(Parcel.java:1247)
WARN/System.err(675): at android.os.Parcel.readException(Parcel.java:1235)
WARN/System.err(675): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1298)
WARN/System.err(675): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
WARN/System.err(675): at android.app.Activity.startActivityForResult(Activity.java:2817)
WARN/System.err(675): at android.app.Activity.startActivity(Activity.java:2923)
WARN/System.err(675): at com.i10n.notifier.GWVectraNotifier$2$1.run(GWVectraNotifier.java:63)
WARN/System.err(675): at android.app.Activity.runOnUiThread(Activity.java:3707)
WARN/System.err(675): at com.i10n.notifier.GWVectraNotifier$2.onClick(GWVectraNotifier.java:53)
WARN/System.err(675): at android.view.View.performClick(View.java:2408)
WARN/System.err(675): at android.view.View$PerformClick.run(View.java:8816)
WARN/System.err(675): at android.os.Handler.handleCallback(Handler.java:587)
WARN/System.err(675): at android.os.Handler.dispatchMessage(Handler.java:92)
WARN/System.err(675): at android.os.Looper.loop(Looper.java:123)
WARN/System.err(675): at android.app.ActivityThread.main(ActivityThread.java:4627)
WARN/System.err(675): at java.lang.reflect.Method.invokeNative(Native Method)
WARN/System.err(675): at java.lang.reflect.Method.invoke(Method.java:521)
WARN/System.err(675): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
WARN/System.err(675): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
WARN/System.err(675): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
实际上我无法理解在Notifier应用程序的清单文件中包含哪些权限来访问k9Mail的MessageList.我粘贴在k9mail应用程序的清单文件中包含的权限之下:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"/>
<permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/read_attachment_label"
android:description="@string/read_attachment_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"/>
<permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/remote_control_label"
android:description="@string/remote_control_desc"/>
<uses-permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"/>
<permission android:name="com.fsck.k9.permission.READ_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/read_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_MESSAGES"/>
<permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/delete_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"/>
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我哪些权限包含在我的应用程序中?在上面的权限中,有些仅适用于k9mail,因为这些是为k9编写的权限类.所以,我只能在上面给出的权限中包含android的内置权限.我试过这样做,但它没有解决我的问题:(
小智 155
您必须android:exported="true"
在要尝试启动的活动中添加清单文件.
android:exported
活动是否可以由其他应用程序的组件启动 - 如果可以,则为"true",否则为"false".如果为"false",则活动只能由相同应用程序的组件或具有相同用户ID的应用程序启动.默认值取决于活动是否包含意图过滤器.缺少任何过滤器意味着只能通过指定其确切的类名来调用活动.这意味着该活动仅供应用程序内部使用(因为其他人不知道类名).所以在这种情况下,默认值为"false".另一方面,至少有一个过滤器的存在意味着该活动旨在供外部使用,因此默认值为"true".
此属性不是限制活动与其他应用程序相关的唯一方法.您还可以使用权限来限制可以调用活动的外部实体(请参阅权限属性).
Jom*_*mia 101
在java.lang.SecurityException
你看到的是,因为您可以输入指向同一活动的两个项目.删除第二个,你应该很高兴去.
您可以在清单中将活动声明为具有不同属性的活动2次,例如:
<activity android:name=".myclass"> </activity>
Run Code Online (Sandbox Code Playgroud)
和
<activity android:name=".myclass" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
您应该从清单中删除不需要的一个
Muh*_*hab 16
在你的Manifest文件中写这个 </application >
<activity android:name="com.fsck.k9.activity.MessageList">
<intent-filter>
<action android:name="android.intent.action.MAIN">
</action>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
并告诉我它是否解决了你的问题:)
小智 7
这个确切的活动我遇到了这个问题.
您无法从外部活动启动com.fsck.k9.activity.MessageList.
我解决了它:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
使用http://developer.android.com/reference/android/content/pm/PackageManager.html
小智 6
我遇到了同样的问题,并希望避免添加你所描述的intent过滤器.经过一番挖掘,我找到了一个xml属性android:export,你应该添加到你想要调用的活动中.
如果没有为您的活动添加意图过滤器,则默认设置为false,但如果您有意图过滤器,则将其设置为true.
这里是文档 http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr:添加android:exported="true"
到AndroidManifest.xml文件中的活动,避免添加intent-filter :)
归档时间: |
|
查看次数: |
179883 次 |
最近记录: |