كيف يمكنني حفظ البيانات من الكاميرا إلى القرص باستخدام MediaStore على الروبوت؟

StackOverflow https://stackoverflow.com/questions/649057

سؤال

لطلبي، فما استقاموا لكم فاستقيموا تم استخدام صفي كاميرا الخاصة لأخذ الصور وقاعدة البيانات الخاصة بي ولكن قريبا بما فيه الكفاية وأنا لا يمكن أن تبقي حقا حتى مع التغييرات وقررت أن استخدام المدمج في تطبيق الكاميرا في الروبوت للقيام وظيفة، ولكن أنا لا يمكن أن يبدو للحصول عليه لحفظ الملف. ما أنا في عداد المفقودين هنا؟ يبدو أن تطبيق لحفظ الملف لكنه بايت فقط 0. نظرت إلى أعلى شفرة المصدر لتطبيق الكاميرا وانها تبحث عن "الانتاج" في إضافات لحفظ الملف. أي مساعدة سيكون موضع تقدير كبير.

Public class CameraTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button cameraButton = (Button) findViewById(R.id.cameraButton);
        cameraButton.setOnClickListener( new OnClickListener(){
            public void onClick(View v ){
                ContentValues values = new ContentValues();
                values.put(Images.Media.TITLE, "title");
                values.put(Images.Media.BUCKET_ID, "test");
                values.put(Images.Media.DESCRIPTION, "test Image taken");
                Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra("output", uri.getPath());
                startActivityForResult(intent,0);
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode== 0 && resultCode == Activity.RESULT_OK){
            ((ImageView)findViewById(R.id.pictureView)).setImageURI(data.getData());
        }
    }


}
هل كانت مفيدة؟

المحلول

وهذا يعمل مع التعليمات البرمجية التالية، منحت كان يجري البكم قليلا مع واحد آخر. ما زلت أعتقد أن هناك لابد أن تكون هناك طريقة أفضل بحيث لا يزال يتم حفظ الصورة الأصلية في مكان ما. لا يزال يرسل لي أصغر 25٪ حجم الصورة.

public class CameraTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button cameraButton = (Button) findViewById(R.id.cameraButton);
    cameraButton.setOnClickListener( new OnClickListener(){
        public void onClick(View v ){

            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

            startActivityForResult(intent,0);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode== 0 && resultCode == Activity.RESULT_OK) {
        Bitmap x = (Bitmap) data.getExtras().get("data");
        ((ImageView)findViewById(R.id.pictureView)).setImageBitmap(x);
        ContentValues values = new ContentValues();
        values.put(Images.Media.TITLE, "title");
        values.put(Images.Media.BUCKET_ID, "test");
        values.put(Images.Media.DESCRIPTION, "test Image taken");
        values.put(Images.Media.MIME_TYPE, "image/jpeg");
        Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
        OutputStream outstream;
        try {
            outstream = getContentResolver().openOutputStream(uri);
            x.compress(Bitmap.CompressFormat.JPEG, 70, outstream);
            outstream.close();
        } catch (FileNotFoundException e) {
            //
        } catch (IOException e) {
            //
        }
    }
}

وأيضا، أنا لا أعرف أن الإفراج أهدي الروبوت يجب إصلاح حجم الصورة صغير قريبا.

نصائح أخرى

ورمز أدناه سوف تبدأ الكاميرا الافتراضية ويكون الكاميرا حفظ الصورة إلى اوري المحدد. والمفتاح هو لوضع اضافية "MediaStore.EXTRA_OUTPUT" جنبا إلى جنب مع اوري المطلوب.

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + image_name + ".jpg");
Uri imageUri = Uri.fromFile(file);

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent, 0);

في المحاولة الأولى، فإنه يمكن أن تعطل تطبيق كاميرا عندما يقرأ بك "إخراج" إضافية، لأنها تتوقع أن يكون أوري، في الوقت الذي توفر سلسلة. يبدو أن تطبيق كاميرا لقراءة العلم إضافي بعد التقاط الصورة. يجب عليك أن تقدم اوري، وليس uri.getPath (). ثم، منذ كنت تعرف URI إلى الصورة، فإنه لن يتم إرجاعها في الدعوة onResult. عليك أن تتذكر أن URI في متغير عضو.

في المحاولة الثانية سوف تحصل على تقليصها (50٪) نقطية الظهر. والمقصود في المقام الأول لأنها وجهات النظر. أعتقد أن نقطية كاملة الحجم كبير جدا لميزانية الذاكرة التطبيق. قد يكون هذا هو السبب وراء المتناقصة.

ولمعلوماتك، وجدت هذا على المستندات: المتصل قد تمر على EXTRA_OUTPUT اضافية للسيطرة حيث ستتم كتابة هذه الصورة. إذا كان EXTRA_OUTPUT غير موجود، ثم يتم إرجاع صورة صغيرة الحجم ككائن نقطية في حقل إضافي. وهذا مفيد للتطبيقات التي تحتاج إلى صورة صغيرة فقط. إذا كان EXTRA_OUTPUT موجود، ثم صورة كاملة الحجم وسوف تكون مكتوبة إلى القيمة أوري من EXTRA_OUTPUT.

وتقع هنا: http://developer.android.com/reference/ الروبوت / مزود / MediaStore.html

وحتى التطبيق يمكن حفظ الصورة بالحجم الكامل بالنسبة لك، إذا كنت اقول انها مكان.

و** تحرير: هذا ليس هو الحال مع أجهزة HTC. HTC (لا صلة) الذي يستخدم واجهة المستخدم هتك المعنى قد تشعبت من الروبوت 1.5 وتحمل الأخطاء التي دائما حفظ الصورة في الدقة المنخفضة. يمكنك النشاط غداء للكاميرا واستخدام وظيفة حصة من الكاميرا إلى استخدام صورة كاملة الحجم.

وحصلت على نفس المشكلة مع المحاكي، حاولت ذلك على الهاتف الحقيقي وانها عملت، ربما يكون ذلك بسبب الهاتف الظاهري لا يمكن أن تأخذ حقا Picures.

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