В настоящее время я работаю над живыми обоями для Android. Оказалось, что программа запуска Samsung TouchWiz никогда не вызывает метод onOffsetChanged
. Единственный способ здесь — определить, работает ли TouchWiz, и соответствующим образом имитировать прокрутку. Есть ли способ определить, работают ли мои живые обои под программой запуска Samsung TouchWiz?
Обнаружение программы запуска TouchWiz
Ответы (2)
Вы можете определить, установлена ли программа запуска, используя следующий код, представленный в приведенных ниже примерах;
Первый
boolean isLauncherInstalled () {
final String myLauncherPackageName = "LAUNCHER PACKAGE NAME"; // com.sec.android.app.launcher
final IntentFilter filterCategory = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(filterCategory);
List<ComponentName> activities = new ArrayList<ComponentName>();
final PackageManager packageManager = (PackageManager) getPackageManager();
packageManager.getPreferredActivities(filters, activities, null);
for (ComponentName activity : activities) {
if (myLauncherPackageName.equals(activity.getPackageName())) {
return true; // Is a match so you have a Launcher installed.
}
}
return false; // No Launcher.
}
Второй
public boolean isLauncherInstalled() {
final String myLauncherPackageName = "LAUNCHER PACKAGE NAME"; // com.sec.android.app.launcher
IntentFilter filterCategory = new IntentFilter(Intent.ACTION_MAIN);
filterCategory.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(filterCategory);
List<ComponentName> preferredActivities = new ArrayList<ComponentName>();
final PackageManager packageManager = (PackageManager) getPackageManager();
packageManager.getPreferredActivities(filters, preferredActivities, myLauncherPackageName);
if (preferredActivities != null && preferredActivities.size()> 0) {
return true; // Is a match so you have a Launcher installed.
}
return false; // No Launcher.
}
Однако лучшим вариантом будет всегда имитировать прокрутку, потому что есть больше лаунчеров, которые не вызывают OnOffsetsChanged
. Но когда вы действительно получите вызов OnOffsetsChanged
, просто отключите имитацию прокрутки. Таким образом, OnOffsetsChanged
может нормально функционировать, если он доступен.
Следующая статья даст вам представление о том, как к этому подойти; Ссылка на статью
Не пытайтесь определить программу запуска, так как HTC делает это и на некоторых устройствах.
Лучшее решение состоит в том, чтобы предположить, что вы НЕ ПОЛУЧИТЕ события прокрутки и ВСЕГДА изначально выполняете симулированную прокрутку. Затем, если вы получите вызов onOffsetChanged
(что произойдет с большинством программ запуска), отключите имитацию прокрутки и продолжайте как обычно.