java.lang.SecurityException:Permission Denial:启动Intent com.android.calendar / .DayActivity

时间:2012-12-21 09:31:21

标签: android android-intent calendar securityexception

在我的应用中,我使用以下代码在DayView上打开标准的Android日历:

Intent intent2 = new Intent();
intent2.setComponent(new ComponentName("com.android.calendar", "com.android.calendar.DayActivity"));
intent2.setAction("android.intent.action.MAIN");
intent2.addCategory("android.intent.category.LAUNCHER");
intent2.setFlags(0x10200000);
intent2.putExtra("beginTime", (new Time()).setJulianDay(reqDay));
intent2.putExtra("DETAIL_VIEW", true);
intent2.putExtra("DETAIL_VIEW_MODE", 2);
context.startActivity(intent2);

这曾经非常好用 - 并且在大多数手机上仍能完美运行。然而,在昨天的一部手机(Android 2.3 - CM7)上,我开始收到此错误(为了便于阅读而增加了换行符):

Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
flg=0x10200000 cmp=com.android.calendar/.DayActivity (has extras) }
from ProcessRecord{407719a0 3244:com.lge.android.calendarwidget/10077}
(pid=3244, uid=10077) requires null

log cat的完整错误如下:

I/ActivityManager(  245): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.calendar/.DayActivity (has extras) } from pid 3244
W/ActivityManager(  245): Permission denied: checkComponentPermission() reqUid=10004
W/ActivityManager(  245): Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.calendar/.DayActivity (has extras) } from ProcessRecord{407719a0 3244:com.lge.android.calendarwidget/10077} (pid=3244, uid=10077) requires null
W/calw3   ( 3244): com.android.calendar not found, trying com.google.android.calendar
W/calw3   ( 3244): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.calendar/.DayActivity (has extras) } from ProcessRecord{407719a0 3244:com.lge.android.calendarwidget/10077} (pid=3244, uid=10077) requires null

我有两个问题:(1)为什么突然间会突然崩溃?它之前绝对适用于这款手机(这是我的主要手机); (2)我该如何解决?

编辑只是补充一点,这个相同的代码在我拥有的另一部手机(HTC Desire X)上仍能完美运行。

2 个答案:

答案 0 :(得分:1)

  

(1)为什么突然间会突然崩溃?它之前绝对适用于这款手机(这是我的主要手机)

该应用程序已升级,可能是固件升级的一部分,并且不再导出该活动。

  

(2)我该如何解决?

删除代码。您无法启动私人(非导出)活动。如果该API支持该活动所做的任何事情,也许可以考虑使用CalendarContract来推广您自己的此活动版本。

您不应该首先在此应用中调用未记录的活动,因为无法保证应用程序将存在于所有设备上,或者支持所有设备上的该活动。你目前的状况只是这个问题的另一个具体表现。

答案 1 :(得分:0)

以前一切都很好很奇怪,我不得不问,你在android清单中有这条线吗?:

 <uses-permission android:name="android.permission.READ_CALENDAR"/>