tôi không thể tìm thấy một ví dụ một trong hai. Điều đầu tiên tôi nhận thấy là EXTRA_LIVE_WALLPAPER_COMPONENT
không yêu cầu Chuỗi, nhưng là ComponentName
. cắt giảm đầu tiên của tôi với ComponentName
trông như thế này:
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);
Đó không cắt nó, vì vậy tôi đào vào mã nguồn Android và tìm thấy những điều sau đây trong LiveWallpaperChange.java
:
Intent queryIntent = new Intent(WallpaperService.SERVICE_INTERFACE);
queryIntent.setPackage(comp.getPackageName());
List<ResolveInfo> list = getPackageManager().queryIntentServices(queryIntent, PackageManager.GET_META_DATA);
Một gỡ lỗi chút với phía trên đoạn, và đây là hình thức cuối cùng của tôi ...
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);
Chìa khóa nằm trong tham số thứ hai là ComponentName
.
Về mặt kỹ thuật, hình thức cuối cùng của tôi hỗ trợ một hệ thống các phương pháp mới đầu tiên, tiếp theo là cũ, tiếp theo là mục đích cụ thể Nook Tablet/Nook Color:
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, Cảm ơn bạn. Tôi đã chuyển từ triển khai ý tưởng này vì nó chỉ là API 16+, nhưng rất có thể sử dụng mã này vào một ngày sau đó. Cảm ơn câu trả lời mô tả! –
Tôi nhận được một lỗi 12-06 14: 18: 26,936: W/CHANGE_LIVE_WALLPAPER (11898): Không phải là một hình nền sống: ComponentInfo {com.android.noisefield/com.android.noisefield.LiveWallpaperService} Can bạn vui lòng cho tôi biết làm thế nào để thay đổi hình nền nếu tôi không phải là chủ sở hữu của hình nền đó? Thay vì getPackageName() để đặt gói dưới dạng chuỗi? Ví dụ: String packageName = "com.android.noisefield"; Làm thế nào để thay thế packageName bằng getPackageName()? Cảm ơn ngài. – Naskov