Определение, использует ли устройство HTC SenseUI

1

Как узнать, использует ли устройство HTC SenseUI?

Я думал об использовании android.os.Build информации, но они кажутся непоследовательными.. есть ли более определенный способ?

Мне нужно узнать, могу ли я запустить календарь, используя com.android.calendar или com.htc.calendar.

Я приветствую любые предложения!

  • 0
    Я знаю, что это не ваш вопрос, но я бы дважды подумал, прежде чем писать приложение, которое зависит от недокументированных API, подобных этому. Ваше приложение обязательно сломается, когда появятся новые телефоны. См. Статью Commonsware относительно этого: androidguys.com/2009/12/14/code-pollution-reaching-past-the-sdk
Теги:

3 ответа

0
Лучший ответ

Вы можете использовать PackageManager, чтобы узнать, существует ли на устройстве com.htc.calendar. И вы можете использовать PackageManager для получения Intent, полезного для открытия этого пакета. Будет ли это "запуск (HTC) календаря" до HTC и Android, а не вы.

Кроме того, как предполагает Марья, вы не очень хорошо понимаете, потому что нет правила, что HTC будет использовать com.htc.calendar на каждом устройстве Sense, сейчас и в будущем.

  • 0
    Какой лучший способ запустить намерение календаря тогда?
  • 0
    @atolar: приложение «Календарь» не является частью Android SDK. Для HTC или «простого» Android не существует документированного и поддерживаемого способа «запуска календарного намерения».
0
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); 
0

Основываясь на предложении 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню