كيفية التقاط صورة وتخزينها بكاميرا Android الأصلية
-
27-09-2019 - |
سؤال
أواجه مشكلة في التقاط صورة وتخزينها من تطبيق الكاميرا الأصلية. فيما يلي عينة من بعض الكود الخاص بي.
_path = Environment.getExternalStorageDirectory() + "make_machine_example.jpg";
File file = new File( _path );
Uri outputFileUri = Uri.fromFile( file );
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
startActivityForResult( intent, 0 );
بعد التقاط الصورة وعادت إلى نشاطي الأصلي ، عندما انتقلت إلى بطاقة SD الخاصة بي عبر Android DDMS Explorer ، فإن الصورة ليست موجودة. أي شخص يعرف لماذا لا يتم حفظ هذا؟
المحلول
هل راجعت ما هو إخراج البيئة. getExternalStorageRagedIrectory () ، لأنه إذا لم يكن يحتوي على مسابقات ملفات زائدة (/) ، فسوف تنتهي صورتك في دليل لا يقيم على بطاقة SDCARD مثل:
/mnt/sdcardmake_machine_example.jpg
عندما ما تريده حقًا هو:
/mnt/sdcard/make_machine_example.jpg
جرب هذا الرمز بدلاً من ذلك:
_path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg";
نصائح أخرى
هنا كان المنتج النهائي في حال كان أي شخص لا يزال يزور هذا الموضوع:
public class CameraCapture extends Activity {
protected boolean _taken = true;
File sdImageMainDirectory;
protected static final String PHOTO_TAKEN = "photo_taken";
@Override
public void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
File root = new File(Environment
.getExternalStorageDirectory()
+ File.separator + "myDir" + File.separator);
root.mkdirs();
sdImageMainDirectory = new File(root, "myPicName");
startCameraActivity();
}
} catch (Exception e) {
finish();
Toast.makeText(this, "Error occured. Please try again later.",
Toast.LENGTH_SHORT).show();
}
}
protected void startCameraActivity() {
Uri outputFileUri = Uri.fromFile(sdImageMainDirectory);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case 0:
finish();
break;
case -1:
try {
StoreImage(this, Uri.parse(data.toURI()),
sdImageMainDirectory);
} catch (Exception e) {
e.printStackTrace();
}
finish();
startActivity(new Intent(CameraCapture.this, Home.class));
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) {
_taken = true;
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken);
}
public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
Bitmap bm = null;
try {
bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
FileOutputStream out = new FileOutputStream(imageDir);
bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
bm.recycle();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
1. فقط استخدم
new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg");
ولا تهتم بالفواصل.
2. واجهت نفس المشكلة من قبل. تحتوي هواتف Senseui على تطبيق كاميرا مخصص لا يقوم بإنشاء ملف. ما هو الجهاز الذي تستخدمه؟ قد يتم إصلاحه بالفعل في أحدث الأجهزة ولكن قد لا يزال يمثل مشكلة. لذا ، إليك عينة كاملة كيفية التغلب عليها مشاكل في حفظ صورة إلى ملف.
يجب عليك إجراء مسح الوسائط بعد حفظ الصورة
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
أضف هذا السطر إلى ملف AndroidManifest.xml وإزالة ملحق Make_machine_example:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
سيبدأ في التقاط الصورة وتخزينها في SDCARD.