[英]How to check if calendar app installed in android?
我已经为我的应用添加了一些按钮,以便为日历事件创建意图。 但我认为最好检查用户是否有任何日历应用程序。 我怎么能这样做?
日历意图如下所示:
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);
它说,在Android兼容性定义文档的第3.2.3.1节中
Android上游项目定义了许多核心应用程序,例如联系人, 日历 ,照片库,音乐播放器等。 设备实现者可以用替代版本替换这些应用程序。 但是,任何此类替代版本都必须遵循上游项目提供的相同Intent模式。 例如,如果设备包含备用音乐播放器,则该设备仍必须遵守第三方应用程序发出的Intent模式以选择歌曲。
该文档继续列出了所有核心应用程序:
基本上,这意味着所有装有Google Play商店的设备都将安装符合标准意图模式的日历应用程序(以及上面列出的所有应用程序)。 因此,您根本不需要检查。
正如MusicMaster所说,所有Android设备都应具有日历应用程序。 但是,如果您的意图是您不确定是否会受到任何活动的影响,您可以使用您的意图查询包管理器,以查看是否有任何活动能够响应它。 像这样:
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(yourIntent, 0);
如果activities
大小大于零,则用户拥有可以响应您的意图的应用程序。
这是我的方法:
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;
}
}
例如,如果应用程序存在,则启动一个intent:
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! :( ");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.