搞了好幾天杆烁。一直都拍不了照兔魂,自動退出举娩,不然就是拍了顯示不出來拍棕,最后還是看書成功的。簡單總結(jié)了一下骄噪,下面有從網(wǎng)上搜的各種代碼链蕊,都嘗試過了,最后的是書本的逻谦。
///--------能拍照陪蜻,拍了顯示不了----------
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//獲取系統(tǒng)版本
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion < 24) {
// 從文件中創(chuàng)建uri
imageUri = Uri.fromFile(imgfile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
} else {
//兼容android7.0 使用共享文件的形式
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, imgfile.getAbsolutePath());
//檢查是否有存儲權(quán)限宴卖,以免崩潰
if (ContextCompat.checkSelfPermission(AddinfoActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//申請WRITE_EXTERNAL_STORAGE權(quán)限
Toast.makeText(AddinfoActivity.this, "請開啟存儲權(quán)限", Toast.LENGTH_SHORT).show();
return;
}
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
}
Log.d(TAG, "onClick2:"+imageUri);
tmp_path = imgfile.getPath();
Log.d(TAG, "onClick3:"+tmp_path);
// 開啟一個帶有返回值的Activity症昏,請求碼為PHOTO_REQUEST_CAREMA
startActivityForResult(intent, 11);
//拍照功能
Time time = new Time();
time.setToNow();
String strtime = time.year+(time.month+1)+time.monthDay+time.hour+time.minute+time.second+""; //加個空將數(shù)字格式轉(zhuǎn)為字符串格式
tmp_path = Environment.getExternalStorageState()+"/image"+strtime+".jpg";
//Log.d(TAG, "onClick2:"+tmp_path);
File imgfile = new File(tmp_path);
Log.d(TAG, "onClick3:"+imgfile);
try {
if(imgfile.exists()){
imgfile.delete();
}
imgfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
/*Uri imageUri;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
imageUri = FileProvider.getUriForFile(AddinfoActivity.this, "com.example.a17251101128_chen_planner.fileprovider", imgfile);
}
else {
imageUri = Uri.fromFile(imgfile);
}
Log.d(TAG, "onClick4: "+ imageUri);*/
//Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
Uri imageUri;
if (ContextCompat.checkSelfPermission(AddinfoActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) AddinfoActivity.this, new String[]{Manifest.permission.CAMERA}, 1);
} else {
//權(quán)限已經(jīng)被授予肝谭,在這里直接寫要執(zhí)行的相應方法即可
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
imageUri = FileProvider.getUriForFile(AddinfoActivity.this, "com.example.a17251101128_chen_planner.fileprovider", imgfile);
}
else {
imageUri = Uri.fromFile(imgfile);
}
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 指定調(diào)用相機拍照后照片的儲存路徑
//intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgfile));
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 11);
}
- 在上面的基礎上小改
//currentapiVersion的方法攘烛,這個可以拍照的
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
Log.e("currentapiVersion","currentapiVersion====>"+currentapiVersion);
if (currentapiVersion<24){
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgfile));
startActivityForResult(intent, 11);
}else {
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, imgfile.getAbsolutePath());
Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, 11);
}
最終我的版本
//拍照功能
Time time = new Time();
time.setToNow();
String strtime = time.year+(time.month+1)+time.monthDay+time.hour+time.minute+time.second+""; //加個空將數(shù)字格式轉(zhuǎn)為字符串格式
//tmp_path = Environment.getExternalStorageState()+"/image"+strtime+".jpg"; //原來是這里的問題
tmp_path = getExternalCacheDir()+"/image"+strtime+".jpg"; //這里
//File imgfile = new File(getExternalCacheDir(), tmp_path);
File imgfile = new File(tmp_path);
try {
if(imgfile.exists()){
imgfile.delete();
}
imgfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
///--------拍照功能栏赴,拍了顯示不了靖秩,可以了現(xiàn)在----------
if (ContextCompat.checkSelfPermission(AddinfoActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) AddinfoActivity.this, new String[]{Manifest.permission.CAMERA}, 1);
} else {
//權(quán)限已經(jīng)被授予沟突,在這里直接寫要執(zhí)行的相應方法即可
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
imageUri = FileProvider.getUriForFile(AddinfoActivity.this, "com.example.a17251101128_chen_planner.fileprovider", imgfile);
}
else {
imageUri = Uri.fromFile(imgfile);
}
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 指定調(diào)用相機拍照后照片的儲存路徑
//intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgfile));
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 11);
}