Как узнать, использует ли устройство HTC SenseUI?
Я думал об использовании android.os.Build информации, но они кажутся непоследовательными.. есть ли более определенный способ?
Мне нужно узнать, могу ли я запустить календарь, используя com.android.calendar или com.htc.calendar.
Я приветствую любые предложения!
Вы можете использовать PackageManager
, чтобы узнать, существует ли на устройстве com.htc.calendar
. И вы можете использовать PackageManager
для получения Intent
, полезного для открытия этого пакета. Будет ли это "запуск (HTC) календаря" до HTC и Android, а не вы.
Кроме того, как предполагает Марья, вы не очень хорошо понимаете, потому что нет правила, что HTC будет использовать com.htc.calendar
на каждом устройстве Sense, сейчас и в будущем.
String thePackage = "com.android.calendar";
String theClassName = "com.android.calendar.LaunchActivity";
Intent defineIntent = null;
try {
PackageManager PACKAGE_NAME = getApplicationContext().getPackageManager();
PACKAGE_NAME.getPackageInfo(thePackage,PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException e){
// regular android calendar doesn't exist
// so try the htc sense one
thePackage = "com.sonyericsson.calendar";
theClassName = "com.sonyericsson.calendar.MonthActivity";
}
defineIntent = new Intent(Intent.ACTION_MAIN);
defineIntent.setComponent(new ComponentName(thePackage, theClassName));
startActivity(defineIntent);
Основываясь на предложении CommonsWare, следующее, что я использовал. Надеюсь, это поможет другим.
PendingIntent pendingIntent = null;
Intent defineIntent = null;
String thePackage = "com.android.calendar";
String theClassName = "com.android.calendar.LaunchActivity";
try {
PackageManager thePackageManager = context.getPackageManager();
thePackageManager.getPackageInfo(thePackage,PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException e){
// regular android calendar doesn't exist
// so try the htc sense one
thePackage = "com.htc.calendar";
theClassName = "com.htc.calendar.LaunchActivity";
}
defineIntent = new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
.setComponent(new ComponentName(thePackage, theClassName));
pendingIntent = PendingIntent.getActivity(context,
0 /* no requestCode */, defineIntent, 0 /* no flags */);
views.setOnClickPendingIntent(R.id.widget, pendingIntent);