从日历打开Android应用(Opening Android App from Calendar)

2019-08-21 04:41发布

我的工作需要的应用程序能在选定的日历创建事件,然后当用户在他们的日历查看应用程序认为,这些事件也提供了一个选项,返回到我的应用程序,以查看它和数据的详细信息与之相关的。

使用日历提供商我能够创建活动和我开放的存储以备后用/去除事件,但我还没有找到从日历查看应用这些事件打开我的应用程序的好方法。

我所考虑的2个选项将包括在事件说明,当点击将由意图过滤器在我的应用程序被捕获的自定义URL(如MYAPP://事件/ 1000)或我可以设置CUSTOM_APP_PACKAGE和CUSTOM_APP_URI从价值观CalendarContract创建活动时。

我与第一个选项问题是,我不认为我可以保证的是,查看日历应用程序将正确地对待我的自定义URL作为链接,让用户点击它(并没有在谷歌的日历,我的平板电脑)。 第二个选项看起来更有前途,但我一直没能找到多少文件,说明如何使用它。

有谁知道如何正确地做到这一点? 任何帮助表示赞赏!

Answer 1:

如果定位果冻豆(API 16+)是可接受的,然后使用CUSTOM_APP_PACKAGE是最好的解决办法。 当添加新的日历事件,你只需要填写CUSTOM_APP_PACKAGECUSTOM_APP_URI领域(与你的包名和一个URI分别标识的情况下):

ContentValues values = new ContentValues();
values.put(CalendarContract.Events.CALENDAR_ID, 1);
values.put(CalendarContract.Events.TITLE, "Check stackoverflow.com");
values.put(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis());
values.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis());
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, getPackageName());
values.put(CalendarContract.Events.CUSTOM_APP_URI, "myAppointment://1");

getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);       

然后,你需要指定为AndroidManifest.xml中的一部分(如文档说明),将在日历应用被称为活动以显示详细视图,例如

    <activity android:name=".ShowCalendarDetailActivity">
        <intent-filter>
            <action android:name="android.provider.calendar.action.HANDLE_CUSTOM_EVENT" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.item/event" />
        </intent-filter>            
    </activity>

ShowCalendarDetailActivity将上出现的按键敲击时启动,并且将通过与动作的通知"android.provider.calendar.action.HANDLE_CUSTOM_EVENT"和它的URI将日历项目URI。

您提供的URI的习俗是在群众演员,与主要CalendarContract.EXTRA_CUSTOM_APP_URI

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    String myCustomUri = getIntent().getStringExtra(CalendarContract.EXTRA_CUSTOM_APP_URI);

    ...
}

如果你想在日历应用建立此意图看看代码,看看EventInfoFragment.updateCustomAppButton()EventInfoFragment.java



Answer 2:

你列出的第一个选项正常工作对我的Nexus S.我只是想它现在以确保它正在从默认的谷歌日历应用的到来。

就我而言,我不是拦截myapp://event/1000 ,我截取的实际网址更像https://myspecialdomain.com/blahblah 。 浏览器开始加载,但它加载任何时间之前,它就会通过我的应用程序交换出去。

如果你想,我可以告诉你我的代码明天。



文章来源: Opening Android App from Calendar