我正在用Java构建壁纸应用程序。当用户选择图像时,应该弹出一个小的默认菜单,如provided screenshot一样,用户可以在其中选择应设置墙纸的应用程序。
到目前为止,我已经使用WallpaperManager设置了墙纸,但是并没有给用户提供移动图像等的选项。这是我有史以来第一个Android应用程序,因此我正在学习我的每一个步骤,如果这是一件容易的事,对不起。我也没有找到解决我问题的SO问题。
能否请您指出正确的方向,我应该在Google上搜索,查找或显示一些实现此目的的代码吗?预先谢谢你。
答案 0 :(得分:0)
以下代码可以解决您的问题
File f=new File("wallpaper_file_path");
Intent i=new Intent(Intent.ACTION_SET_WALLPAPER,Uri.fromFile(f));
startActivity(i);
答案 1 :(得分:0)
我制作了墙纸应用程序,其中,我使用了缩放图像库,以便可以调整图像,然后获取该图像视图的缓存并将其设置为墙纸。我可以将其设置为主屏幕,锁定屏幕以及两者
public void SetHomeAndLockScreen()
{
bmap=((BitmapDrawable)imageview.getDrawable()).getBitmap();//get the cache from zoomable imageview
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
WallpaperManager wpm = WallpaperManager.getInstance(getApplicationContext());
try {
wpm.setBitmap(bmap, null, true, WallpaperManager.FLAG_LOCK);
wpm.setBitmap(bmap);
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Wallpaper Applied", Toast.LENGTH_SHORT).show();
}
答案 2 :(得分:0)
我了解到您需要从图库中裁剪图像,请尝试使用x的电话屏幕宽度和y的屏幕高度
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
File file = new File(filePath);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 4);
intent.putExtra("aspectY", 16);
intent.putExtra("outputX", 720);
intent.putExtra("outputY", 1080);
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_CROP_ICON);`
选择图片后,将选择活动返回以保存内容。 onActivityResult:
Bundle extras = data.getExtras();
if(extras != null ) {
Bitmap photo = extras.getParcelable("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);
// The stream to write to a file or directly using the photo
} and set the wall paper using wallpaper manager
答案 3 :(得分:0)
现代解决方案:)
/**
* Set as wallpaper method
*/
public void setWallpaper() {
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Android 7.0+ required
Uri wallUri = getImageUri(this, wallpaperDrawableBitmap);
intent.setDataAndType(wallUri, "image/jpeg");
intent.putExtra("mimeType", "image/jpeg");
this.startActivity(Intent.createChooser(intent, "Set as:"));
}
静态上下文的现代解决方案:)
/**
* Set as wallpaper
*/
public static void setWallpaper(Activity activity) {
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Android 7.0+ required
Uri wallUri = getImageUri(activity, wallpaperDrawableBitmapStatic);
intent.setDataAndType(wallUri, "image/jpeg");
intent.putExtra("mimeType", "image/jpeg");
activity.startActivity(Intent.createChooser(intent, "Set as:"));
}
请注意, setDataAndType(...)需要图像 URI 。