[英]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.