سؤال

أواجه مشكلة في التقاط صورة وتخزينها من تطبيق الكاميرا الأصلية. فيما يلي عينة من بعض الكود الخاص بي.

_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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top