打开保存在SD卡中的图像,并选择将其裁剪为在图库中应用为壁纸

时间:2012-12-03 02:52:17

标签: android android-intent android-camera-intent

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

使用以下代码用户可以将其设置为壁纸。

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

然而,当从Gallery应用程序中选择图像来设置壁纸时,这不会为用户提供任何用户选择图像的一部分(如裁剪操作)的UI。我希望我的代码能够触发这样的操作。当用户点击我的应用程序中的按钮时,我想将它们带到带有裁剪选项的图库应用程序来设置壁纸。

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

1 个答案:

答案 0 :(得分: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;
    
  4. 此代码将在您选择图像后立即激活裁剪操作。

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