在android中设置墙纸时如何打开“设置为”菜单

时间:2019-07-18 08:33:31

标签: java android android-intent

我正在用Java构建壁纸应用程序。当用户选择图像时,应该弹出一个小的默认菜单,如provided screenshot一样,用户可以在其中选择应设置墙纸的应用程序。

到目前为止,我已经使用WallpaperManager设置了墙纸,但是并没有给用户提供移动图像等的选项。这是我有史以来第一个Android应用程序,因此我正在学习我的每一个步骤,如果这是一件容易的事,对不起。我也没有找到解决我问题的SO问题。

能否请您指出正确的方向,我应该在Google上搜索,查找或显示一些实现此目的的代码吗?预先谢谢你。

4 个答案:

答案 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