Tattooを初めとする、HTC Sense UIには、Google標準のカレンダーアプリは入っていません。

従って、カレンダーを起動するアプリ(タオでは、tCalendarや、tCalendarWidget)は、HTC Sense上ではカレンダーアプリを起動できません。HTCのカレンダーアプリを起動するように変更する必要があります。

tCalendarWidgetは、前から対応しようとは思っていたのですが、延び延びになっていました。

Desireが明日発売されますから、必然的に対応する必要が出てきたのであわてて対応してきました。

以下、解説です。

概要

既にカレンダー起動ロジックを書いている方は、HTCのパラメータだけわかれば対応可能で解説は必要ないと思います、Googleのカレンダーアプリと、HTCのカレンダーアプリは以下のようなコンポーネント名となっています。


//HTCSense以外のカレンダー
private static final String DEFAULT_CALENDAR_PACKAGE = "com.android.calendar";
private static final String DEFAULT_CALENDAR_CLASS = "com.android.calendar.LaunchActivity";
//HTCSenseのカレンダー
private static final String DEFAULT_CALENDAR_PACKAGE_HTC = "com.htc.calendar";
private static final String DEFAULT_CALENDAR_CLASS_HTC = ".LaunchActivity";

ロジック的には、Googleカレンダーが見つからなければ、HTCカレンダーを起動する処理に変更するだけです。

チェックロジック


Intent intent = new Intent();
ComponentName componentName = new ComponentName(DEFAULT_CALENDAR_PACKAGE, DEFAULT_CALENDAR_CLASS);
intent.setComponent(componentName);
final PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if(list.size() <= 0 ){
/*
* HTCSenseの場合
*/
componentName = new ComponentName(DEFAULT_CALENDAR_PACKAGE_HTC, DEFAULT_CALENDAR_CLASS_HTC);
intent.setComponent(componentName);
}

こんな感じで、指定されたコンポーネントがあるかをチェックしていくだけです。(チェックメソッドを作った方がよいでしょうね)

ちなみに、現在デモで出ているIS01もGoogle標準のカレンダーはインストールされていませんし、Alex eReaderも同じくインストールされていません。

ブログ内の関連する記事