nie mogę znaleźć przykład albo. Po pierwsze zauważyłem, że EXTRA_LIVE_WALLPAPER_COMPONENT
nie wymaga String, ale ComponentName
. Moje pierwsze cięcie z ComponentName
wyglądał następująco:
ComponentName component = new ComponentName(getPackageName(), "LiveWallpaperService");
intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component);
startActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER);
To nie wyciąć go, więc sięgnął do kodu źródłowego Androida i stwierdzili, że następujące w LiveWallpaperChange.java
:
Intent queryIntent = new Intent(WallpaperService.SERVICE_INTERFACE);
queryIntent.setPackage(comp.getPackageName());
List<ResolveInfo> list = getPackageManager().queryIntentServices(queryIntent, PackageManager.GET_META_DATA);
Trochę debugowanie z powyżej fragmencie, a to jest moja ostateczna forma ...
ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService");
intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component);
startActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER);
kluczem było w drugim parametrze do ComponentName
.
Technicznie rzecz biorąc, moja ostateczna forma obsługuje hierarchię nowej pierwszej metodzie, po czym stary, a następnie konkretnej intencji Nook Tablet/Nook Kolor:
Intent intent;
// try the new Jelly Bean direct android wallpaper chooser first
try {
ComponentName component = new ComponentName(getPackageName(), getPackageName() + ".LiveWallpaperService");
intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, component);
startActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER);
}
catch (android.content.ActivityNotFoundException e3) {
// try the generic android wallpaper chooser next
try {
intent = new Intent(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
startActivityForResult(intent, REQUEST_SET_LIVE_WALLPAPER);
}
catch (android.content.ActivityNotFoundException e2) {
// that failed, let's try the nook intent
try {
intent = new Intent();
intent.setAction("com.bn.nook.CHANGE_WALLPAPER");
startActivity(intent);
}
catch (android.content.ActivityNotFoundException e) {
// everything failed, let's notify the user
showDialog(DIALOG_NO_WALLPAPER_PICKER);
}
}
}
Ah, dzięki. Zrezygnowałem z realizacji tego pomysłu, ponieważ jest to tylko API 16+, ale najprawdopodobniej wykorzystam ten kod w późniejszym terminie. Dzięki za opisową odpowiedź! –
Dostaję błąd 12-06 14: 18: 26.936: W/CHANGE_LIVE_WALLPAPER (11898): brak żywych tapety: ComponentInfo {com.android.noisefield/com.android.noisefield.LiveWallpaperService} można proszę powiedz mi, jak zmienić tapetę, jeśli nie jestem jej właścicielem? Zamiast getPackageName(), aby umieścić pakiet jako ciąg? Na przykład String packageName = "com.android.noisefield"; Jak zamienić nazwę pakietu na wartość getPackageName()? Dzięki, sir. – Naskov