使用Intent从另一个程序调用活动会导致权限被拒绝

时间:2010-10-16 04:51:45

标签: android android-intent android-activity

在我非常简单的应用程序中(基于默认的Hello World应用程序但添加了一个按钮)我尝试打开我的一部手机(SE X10 Mini)预装活动,如下所示:

Intent calendarIntent = new Intent();
calendarIntent.setClassName("com.sonyericsson.calendar","com.sonyericsson.calendar.dayview.DayActivity");
startActivity(calendarIntent);

但是,它不起作用,我在日志中收到以下错误:

E/AndroidRuntime( 2215): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.sonyericsson.calendar/.dayview.DayActivity } from ProcessRecord{302cf238 2215:com.klibb.quickappointment/10079} (pid=2215, uid=10079) requires null
E/AndroidRuntime( 2215):    at android.os.Parcel.readException(Parcel.java:1246)
E/AndroidRuntime( 2215):    at android.os.Parcel.readException(Parcel.java:1234)
E/AndroidRuntime( 2215):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1157)
E/AndroidRuntime( 2215):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1449)
E/AndroidRuntime( 2215):    at android.app.Activity.startActivityForResult(Activity.java:2661)
E/AndroidRuntime( 2215):    at android.app.Activity.startActivity(Activity.java:2705)
E/AndroidRuntime( 2215):    at com.klibb.quickappointment.QuickAppointmentActivity$1.onClick(QuickAppointmentActivity.java:25)

我能做些什么或者这种类型的代码是否禁止?在网上搜索时,我看到人们在我认为他们的自己的应用程序中更改了intent过滤器,但我显然无法在预装的应用程序中更改任何内容。

欢迎任何想法!

PS。我想要实现的是创建一个小程序,直接启动我的手机的“新Apppointment”活动,以避免经历两个额外的活动(启动默认日历,点击一天,点击一小时)。

2 个答案:

答案 0 :(得分:1)

的Mathias,

你要做的事实上非常简单。但是,您需要的信息可能很难获得。您需要找到三条信息(这些信息都不需要重写预先安装的应用程序)

1)确定活动是否可以由外部组件启动。这是通过使用程序包管理器为您提供所有已安装程序包及其相关数据的列表来完成的。您还可以从Android Market获得免费的包裹分析器。 2)获取启动应用程序所需的权限并将其添加到清单中。权限已在Android OS中注册,但据我所知,获取外部应用程序所需的权限不是通过程序包管理器完成的。 3)获取启动活动所需的Intent Extras(数据),如果它是“子活动”。

#2&的最佳选择3是联系索尼爱立信或在他们的网站上搜索。许多Android手机制造商确实提供有关其产品的公开信息。如果幸运的话,可能很简单,包括他们通过AIDL为您提供的文件。

FuzzicalLogic

答案 1 :(得分:-1)

您必须在清单中列出android.permission.READ_CALENDAR权限。也可能需要其他一些。