2014-02-19 18 views
0

Я хочу сделать снимок с камерой и обрезать ее. Это прекрасно работает (со вторым кодом) на новых устройствах с этим кодом, я нашел на вики сообщества:Обрезать изображение на разных устройствах

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-источнике, которые я могу использовать для выбора правильных строк для намерения?

ответ

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); 
} 
2

Некоторые устройства не поддерживают обрезку, что означает, что в их приложении для галереи нет встроенного устройства. Лучшим решением является создание механизма обрезки в вашем приложении. Вот хороший открытый источник кадрирования:

https://github.com/edmodo/cropper

+0

Большая библиотека! Спасибо :) – Cilenco

Смежные вопросы