裁剪图像在不同的设备上

时间:2014-02-19 11:50:14

标签: android android-intent android-gallery

我想用相机拍照并裁剪它。这在我在社区维基上找到的代码的新设备上运行得很好(第二个代码):

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.gallery", "com.android.camera.CropImage");

在某些Android版本上,包括最新版本,com.android.gallery不再存在。你需要使用它:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.google.android.gallery3d", "com.android.gallery3d.app.CropImage");

当然我也想支持旧设备。什么是“一些Android版本”?有人可以给我一个API级别吗?或者Android源代码中是否有任何最终的constance我可以用来为意图选择正确的字符串?

2 个答案:

答案 0 :(得分:2)

某些设备不支持裁剪,这意味着他们的图库应用程序没有构建它。最好的解决方案是在您的应用中构建裁剪机制。这是一个很好的开源裁剪器:

https://github.com/edmodo/cropper

答案 1 :(得分:1)

我找到了一个更好的代码来解决这个问题。这里将搜索能够裁剪图像并启动第一个找到的应用程序。希望能帮助别人。

Intent cropApps = new Intent("com.android.camera.action.CROP");
cropApps.setType("image/*");

List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(cropApps, 0);
int size = list.size();

if (size == 0) 
{           
    Toast.makeText(context, "Can not find image crop app", Toast.LENGTH_SHORT).show();      
    return null;
} 
else 
{
    ResolveInfo res = list.get(0);

    Intent intent = new Intent();
    intent.setClassName(res.activityInfo.packageName, res.activityInfo.name);

    intent.setData(imageCaptureUri);
    intent.putExtra("outputX", 96);
    intent.putExtra("outputY", 96);
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("scale", true);
    intent.putExtra("return-data", true);

    startActivityForResult(intent, CROP_FROM_CAMERA);
}