Mam do czynienia z problemem z analizą uri podjętego zdjęcia do aktywowania upraw. W mojej aplikacji użytkownicy mogą zrobić zdjęcie lub wybrać je z galerii, a następnie przyciąć i przesłać. Wszystko brzmi prosto.Android: Wywołanie aktywności upraw po zrobieniu zdjęcia
Kiedy wybrać z menu Galeria, Galeria aplikacja zwróci URI dla wybranego zdjęcia tak:
content://media/external/images/media/20
rozpocząć działalność plonów z tego URI wykonując kod, wszystko wydaje się w porządku:
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(uri);
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, REQUEST_CODE_CROP);
Ale kiedy robię zdjęcie, mogę znać tylko ścieżkę zdjęcia w następujący sposób:
file:///mnt/sdcard/iBet88.us/IMAGE_20120517_151606.jpg
i przycinanie Aktywność nie zaakceptuje tego URI. Próbowałem inny sposób z dostawca treści: dodawanie nowo zrobione zdjęcie do ContentProvider, a następnie dostać nowy URI w sheme „treść: // ...” z następującym kodem:
// TODO insert to Content Provider
ContentResolver cr = getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.DATA, avatarFilePathTmp.getPath());
contentValues.put(MediaStore.Images.Media.IS_PRIVATE, 0);
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
// TODO get id from Content Provider
String[] projection = {
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA
};
String selectionClause = "" + MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = {avatarFilePathTmp.getPath()};
Cursor mCursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
selectionClause,
selectionArgs,
"");
Uri uri = null;
if (null == mCursor) {
} else if (mCursor.getCount() < 1) {
} else {
mCursor.moveToFirst();
int id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media._ID));
String u = "content://media/external/images/media/" + id;
// create new Uri
uri = Uri.parse(u);
}
My new Uri jest podobna do URI z galerii aplikacji, ale kiedy rozpocząć działalność upraw nowej Uri, otrzymuję ten wyjątek:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.android.camera.action.CROP dat=content://media/external/images/media/20 (has extras) }
moje pytania:
1. Dlaczego aktywny Crop odmawia pracy z moim nowym Uri, pomimo mojego nowy Uri i uri z aplikacji Gallery mają tę samą "treść: // ..."
2. Jak mogę wywołać funkcję Crop Activity, aby przyciąć zdjęcie w sdcard, które znam tylko na jego ścieżce?
Próbowałem google, ale wciąż nie mam szczęścia.
Przepraszamy za mój zły angielski. Dziękuję Ci.
Czy to działa dla Ciebie? – Darpan