0

我有一个应用程序,其中我在SD Card的一个文件夹中下载了一些图像。我想把它保存为墙纸。

使用下面的代码用户可以将其设置为墙纸。

WallpaperManager myWallpaperManager = WallpaperManager.getInstance(context);
myWallpaperManager.setBitmap(loadedImage);

但是,当从图库应用程序中选择图像以设置壁纸时,这不会为用户提供任何 UI 来选择图像的一部分,例如裁剪操作。我希望我的代码触发这样的操作。当用户单击我的应用程序中的按钮时,我想将他们带到带有裁剪选项的图库应用程序以设置壁纸。

请让我知道如何做到这一点。谢谢你。

4

1 回答 1

1

你可能想试试这个:

  1. 从您的图书馆(包括 SD 卡)中选择 - void selectPhoto()

    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Choose photo to upload"), PICK_FROM_FILE);
    
  2. 开始裁剪动作 - void doCrop()

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");
    
    // Check if there is image cropper application installed.
    List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 );
    
    int size = list.size();
    
    // If no cropper application is found, throw a message.
    if (size == 0) {            
        Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
        return;
    
    // If there're cropper applications found, use the first
    } else {
    
        // Specify image path and cropping parameters
        intent.setData(mImageCaptureUri);
        intent.putExtra("outputX", 0);
        intent.putExtra("outputY", 0);
        intent.putExtra("return-data", true);
    
        Intent i = new Intent(intent);
        ResolveInfo res = list.get(0);
        i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        startActivityForResult(i, CROPPED_IMAGE);
    
  3. 处理活动结果 - void onActivityResult(int requestCode, int resultCode, Intent data)

    if (resultCode != RESULT_OK) return;
    
    switch (requestCode) {
        case PICK_FROM_FILE: 
            mImageCaptureUri = data.getData();
            doCrop();
            break;          
        case CROPPED_IMAGE:         
            Bundle extras = data.getExtras();
            try{
                if (extras != null) {
                     Bitmap myImage = extras.getParcelable("data");
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            break;
    

此代码将在您选择图像后立即激活裁剪操作。

请注意,mImageCaptureUri是选定的图像 URI,它将传递给裁剪操作的意图。

于 2012-12-03T04:18:53.703 回答