最近在做及時通訊,選擇了網易云通訊,但是在拍照的時候,提示"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);
問題成功解決。
如果你也在做即時通訊,也集成網易云遇到這個問題,幫到了您,請點個贊,傳遞正能量。