Android中擷取選擇圖片與擷取拍照返回結果差異

來源:互聯網
上載者:User

標籤:des   android   style   blog   color   io   os   ar   使用   

導語:

如今的安卓應用在選擇圖片的處理上大多合并使用拍照和從相簿中選擇這兩種方式(當然這是產品dog的事,開篇跑題。。。)

今天在寫一個這樣的功能模組遇到一個尷尬的問題,同樣是拍照擷取圖片功能,在同事的三星上跑沒問題,但是在My Phone上一跑就崩(吐槽一下國產廠商對android的系統級改造真是太大,連錯誤記錄檔都打不出來,還有老闆啥時候給我配個測試機唄),下面是在某型手機上測試的報錯結果

錯誤報表:

10-21 17:41:43.634: E/AndroidRuntime(32683): FATAL EXCEPTION: main

10-21 17:41:43.634: E/AndroidRuntime(32683): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10, result=-1, data=Intent { act=inline-data (has extras) }} to activity {*****}: java.lang.NullPointerException

問題分析:

這是出錯部分代碼,可以看到我直接從返回Intent中擷取uri,但實際上有些手機在拍照後uri是空的,所以null 指標異常也不奇怪了

       if (resultCode == RESULT_OK) {                Uri uri = data.getData();                ContentResolver cr = this.getContentResolver();                try {                    if (bmp != null)                        bmp.recycle();                    bmp = BitmapFactory.decodeStream(cr.openInputStream(uri));                    bmp = MediaStore.Images.Media.getBitmap(cr, uri);                    imagedata = StreamUtils.stream2ByteArray(cr                            .openInputStream(uri));                    AVFile img_file = new AVFile("photo_1", imagedata);                    img_file.saveInBackground();                    images.add(img_file);                } catch (FileNotFoundException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }                photo.setImageBitmap(bmp);            } else {                Toast.makeText(PublishActivity.this, "請重新選擇圖片",                        Toast.LENGTH_SHORT).show();            }

所以解決方案就是分別處理從相簿選取和拍照這兩種情況,以便能適應更多的裝置

解決辦法

10代表拍照,20代表從相簿選取。

     if (requestCode == 10) {         if (resultCode == RESULT_OK) {                if (bmp != null)                    bmp.recycle();                bmp = (Bitmap) data.getExtras().get("data");                ByteArrayOutputStream baos = new ByteArrayOutputStream();                bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);                imagedata = baos.toByteArray();                AVFile img_file = new AVFile("photo_1", imagedata);                img_file.saveInBackground();                images.add(img_file);                photo.setImageBitmap(bmp);            } else {                Toast.makeText(PublishActivity.this, "請重新選擇圖片",                        Toast.LENGTH_SHORT).show();            }        }        if (requestCode == 20) {            if (resultCode == RESULT_OK) {                Uri uri = data.getData();                ContentResolver cr = this.getContentResolver();                try {                    if (bmp != null)                        bmp.recycle();                    bmp = BitmapFactory.decodeStream(cr.openInputStream(uri));                    bmp = MediaStore.Images.Media.getBitmap(cr, uri);                    imagedata = StreamUtils.stream2ByteArray(cr                            .openInputStream(uri));                    AVFile img_file = new AVFile("photo_1", imagedata);                    img_file.saveInBackground();                    images.add(img_file);                } catch (FileNotFoundException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }                photo.setImageBitmap(bmp);            } else {                Toast.makeText(PublishActivity.this, "請重新選擇圖片",                        Toast.LENGTH_SHORT).show();            }        }

 

Android中擷取選擇圖片與擷取拍照返回結果差異

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.