網易云Android 7.0拍照失敗

最近在做及時通訊,選擇了網易云通訊,但是在拍照的時候,提示"SD卡被拔出或存儲空間不足,無法保存頭像",


報錯截圖

聯系技術支持,居然讓我重啟手機試一下,說他也沒遇到過,太不靠譜,看來展現自己才華的時候到了,于是定位到錯誤的代碼

      try {
            String outPath = getIntent().getStringExtra(Extras.EXTRA_FILE_PATH);
            if (TextUtils.isEmpty(outPath)) {
                Toast.makeText(this, R.string.sdcard_not_enough_error, Toast.LENGTH_LONG).show();
                finish();
                return;
            }
          //7.0前當你跨package域傳遞file://的URI---------
           File outputFile = new File(outPath);
           Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
           intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputFile));
            startActivityForResult(intent, REQUEST_CODE_CAMERA);
          //7.0前當你跨package域傳遞file://的URI----------
        } catch (ActivityNotFoundException e) {
            finish();
        } catch (Exception e) {
            e.printStackTrace();
            Log.i("ExternalStorage",e.getMessage());
            Toast.makeText(this, R.string.sdcard_not_enough_head_error, Toast.LENGTH_LONG).show();
            finish();
        }

發現是這塊出現了異常,android.os.FileUriExposedException,7.0之后跨package傳遞file uri官方推薦的方式是使用FileProvider,當然你也可以使用ContentProvider。將上面代碼改成:

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            ContentValues contentValues  = new ContentValues();
            contentValues.put(MediaStore.Images.Media.DATA, outPath);
            Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
            startActivityForResult(intent, REQUEST_CODE_CAMERA);

問題成功解決。
如果你也在做即時通訊,也集成網易云遇到這個問題,幫到了您,請點個贊,傳遞正能量。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容