【问题标题】:java.lang.SecurityException: Permission Denial: starting Intent com.android.calendar/.DayActivityjava.lang.SecurityException:权限被拒绝:启动 Intent com.android.calendar/.DayActivity
【发布时间】:2012-12-21 09:31:21
【问题描述】:

在我的应用中,我使用以下代码在 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

日志猫的完整错误如下:

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)上仍然可以正常工作。

【问题讨论】:

    标签: android android-intent calendar securityexception


    【解决方案1】:

    (1) 为什么突然断了?之前肯定在这部手机上工作过(这是我的主要手机)

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

    (2) 我该如何解决?

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

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

    【讨论】:

    • 虽然我根据其优点和内容接受这个答案,但值得注意的是,该应用程序最初来自一家非常大的公司(想想数十亿的跨国公司)。这个应用在我测试过的其他三部手机和各种模拟器上仍然可以正常运行。
    • @AleksG:“值得注意的是,该应用程序最初来自一家非常大的公司(想想数十亿的跨国公司)”——是吗?欢迎他们收购 Google 并强制员工导出该活动,并提供记录和支持的访问方式。或者,欢迎他们编写自己的日历应用程序,以免依赖于他们无法控制的应用程序。
    【解决方案2】:

    奇怪的是之前一切都很好,我不得不问,你的android manifest中有这行吗?:

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

    【讨论】:

    • 是的,我愿意。但是在这种情况下它是无关紧要的,因为您只需要此权限即可直接读取日历数据,而不是通过意图调用它。请注意,它在另一部手机上仍然可以正常工作。
    猜你喜欢
    • 2013-06-05
    • 2013-11-18
    • 2011-02-27
    • 2023-03-03
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多