0

我想设置画廊的壁纸。所选图像必须使用设备的 CropImage 类。

问题是每个设备都有不同的 CropImage 类,所以当我使用“Crop”操作时,设备的 CropImage 会打开,但并非全部设置为墙。

代码:

Intent cropperIntent = new Intent("com.android.camera.action.CROP", chosenImageUri);
        cropperIntent.setDataAndType(chosenImageUri, "image/*");

        cropperIntent.putExtra("crop", true);
        cropperIntent.putExtra("aspectX", outSize.x);
        cropperIntent.putExtra("aspectY", outSize.y);
        cropperIntent.putExtra("outputX", outSize.x);
        cropperIntent.putExtra("outputY", outSize.y);
        cropperIntent.putExtra("width", outSize.x);
        cropperIntent.putExtra("height", outSize.y);
        cropperIntent.putExtra("scale", true);
        cropperIntent.putExtra("noFaceDetection", true);
        cropperIntent.putExtra("set-as-wallpaper", true); // for: com.android.gallery3d.app.CropImage
        cropperIntent.putExtra("setWallpaper", true); // for: com.android.camera.CropImage

对于某些设备,它根本没有设置为墙纸(如 HTC)。也许必须设置另一个额外的东西,比如“设置为壁纸”和“设置为壁纸”......

是否有一种通用方法可以为所有设备设置带有裁剪器的壁纸?

4

1 回答 1

0

这肯定不适用于某些手机,例如 HTC,因为它们使用自己的图库/相机。对于这些设备,您可以只使用未裁剪的图像作为单独的资源。但是,如果您有图像位图,则将添加此功能以设置为墙纸:

  public void SetBackground(int Url) {

    try {
        File file = new File("/sdcard/sampleimage");
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), Url);
        bitmap.compress(CompressFormat.JPEG, 80, new FileOutputStream(file));
        Context context = this.getBaseContext();
        context.setWallpaper(bitmap);            
        Toast.makeText(getApplicationContext(), "Wallpaper has been set",             Toast.LENGTH_SHORT).show();            
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }         
}

您应该为此添加权限

<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>

这是取自这里

于 2013-07-03T08:46:51.100 回答