" SecurityException:Permission Denial"打开日历时意图

时间:2018-05-14 07:14:15

标签: android android-intent android-calendar android-securityexception

背景

为了在特定时间转到日历,我们使用此功能(基于this link):

@Nullable
public static Intent prepareIntentForCalendar(final Context context, final Date date) {
    Intent intent = null;
    final Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
    builder.appendPath("time");
    ContentUris.appendId(builder, date.getTime());
    intent = new Intent(Intent.ACTION_VIEW).setData(builder.build());
    final PackageManager pm = context.getPackageManager();
    final ResolveInfo resolveActivity = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY
            | PackageManager.GET_RESOLVED_FILTER);
    if (resolveActivity == null)
        return null;
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY
            | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    return intent;
}

只有当它不为空时,我们才允许使用意图。

问题

最近,我有一个奇怪的例外。它是这样的:

Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=content://com.android.calendar/time/-11518765200000 flg=0x58080000 cmp=com.google.android.gm/.browse.TrampolineActivity } from ProcessRecord{fb2ca43 25597:.../u0a127} (pid=25597, uid=10127) requires com.google.android.gm.permission.READ_GMAIL
       at android.os.Parcel.readException(Parcel.java:1945)
       at android.os.Parcel.readException(Parcel.java:1891)
       at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4373)
       at android.app.Instrumentation.execStartActivity(Instrumentation.java:1631)
       at android.app.Activity.startActivityForResult(Activity.java:4762)
       at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
       at android.app.Activity.startActivityForResult(Activity.java:4702)
       at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
       at android.app.Activity.startActivity(Activity.java:5123)
       at android.app.Activity.startActivity(Activity.java:5091)
       at 
       ...

我发现了什么

文档对权限要求没有任何说明。事实上,如果你使用的只是一个意图,那说相反:

  

您的应用程序不需要读取和写入日历的权限   数据。它可以改为使用Android的日历支持的意图   应用程序将读取和写入操作移交给该应用程序。   下表列出了Calendar支持的意图   提供商:

在互联网上搜索,我甚至都不知道发生了什么。

我所知道的只是它出现在各种设备和各种Android版本上,正如Crashlytics所报告的那样:

enter image description here

目前,我还报告过此here,因为我认为不会发生这种崩溃。

问题

  1. 为什么会这样?
  2. 是否会在清单帮助中添加权限?
  3. 我该怎么做才能处理它?我现在可以用try-catch包装,但是看到发生这个错误意味着实际上有一个应用程序可以处理Intent,但它并没有让我达到它......
  4. 可能有任何好的后备吗?

0 个答案:

没有答案