الوصول إلى الصور من تطبيقات الصور في تطبيق Android الخاص بي
-
23-08-2019 - |
سؤال
تماما مثل iPhone لديه uiimagePickerController للسماح للمستخدم الوصول إلى الصور المخزنة على الجهاز، هل لدينا عنصر تحكم مماثل في Android SDK؟
شكرا.
المحلول
يمكنك استخدامstartActivityForResult
, ، يمر في نية تصف الإجراء الذي تريد إكماله ومصدر البيانات لأداء الإجراء.
لحسن الحظ بالنسبة لك، يتضمن Android إجراء لاختيار الأشياء: Intent.ACTION__PICK
ومصدر بيانات تحتوي على صور:android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
للصور على الجهاز المحلي أوandroid.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
للصور على بطاقة SD.
يتصل startActivityForResult
تمر في إجراء الاختيار والصور التي تريد أن يختارها المستخدم من هذا النحو:
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);
ثم تجاوز onActivityResult
للاستماع للمستخدم بعد أن قدمت اختيارا.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_IMAGE)
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
// TODO Do something with the select image URI
}
}
بمجرد أن يكون لديك الصورة URI، يمكنك استخدامها للوصول إلى الصورة والقيام بكل ما عليك فعله به.
نصائح أخرى
يمكنك أيضا القيام به:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
هذا سيختار الصور عبر جميع المخازن.
مجرد تحديث للإجابة المقدمة من ريتو. يمكنك القيام بذلك لتوسيع نطاق الصورة:
private String getPath(Uri uri) {
String[] data = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(context, uri, data, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}