我已经为我的应用添加了一些按钮,以便为日历活动创建意图。但我认为最好检查用户是否有任何日历应用程序。我怎么能这样做?
日历意图如下:
Intent calIntent = new Intent(Intent.ACTION_INSERT);
calIntent.setType("vnd.android.cursor.item/event");
calIntent.putExtra(Events.TITLE, "My House Party");
calIntent.putExtra(Events.EVENT_LOCATION, "My Beach House");
calIntent.putExtra(Events.DESCRIPTION, "A Pig Roast on the Beach");
GregorianCalendar calDate = new GregorianCalendar(2012, 7, 15);
calIntent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
calIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calDate.getTimeInMillis());
calIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
calDate.getTimeInMillis());
startActivity(calIntent);
答案 0 :(得分:3)
在Android Compatibility Definition Document的第3.2.3.1节中,它说
Android上游项目定义了许多核心应用程序,例如联系人,日历,照片库,音乐播放器和 等等。设备实现者可以用替代版本替换这些应用程序。 但是,任何此类替代版本必须遵守上游项目提供的相同Intent模式。例如,如果是 设备包含一个替代音乐播放器,它必须仍然尊重第三方应用程序发出的Intent模式来选择一首歌。
该文档继续列出所有核心应用程序:
这基本上意味着所有使用Google Play商店的设备都会安装一个日历应用程序(以及上面列出的所有应用程序),以满足标准的意图模式。因此,您根本不需要检查。
答案 1 :(得分:3)
正如MusicMaster所说,所有Android设备都应该有一个日历应用程序。但是,如果您的意图是您不确定是否会受到任何活动的影响,您可以使用您的意图查询包管理器,以查看是否有任何活动能够响应它。像这样:
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(yourIntent, 0);
如果activities
的大小大于零,则用户有一个可以响应您的意图的应用。
答案 2 :(得分:1)
这是我的方法:
public static boolean isPackageInstalled(String packagename, Context context) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
例如,如果应用程序存在,则启动意图:
if(isPackageInstalled("com.android.calendar", getApplicationContext())){
Intent i = new Intent();
PackageManager manager = getPackageManager();
i = manager.getLaunchIntentForPackage(packageName);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
}else{
Log.i("myApp", "Application NOT Installed! :( ");
}