3
在這一行:BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
它引發了一個fileNotFound異常。這是Logcat:來自Android網站的相機意圖不工作 - Android
01-29 23:56:12.296: E/BitmapFactory(30046): Unable to decode stream: java.io.FileNotFoundException: /file:/storage/emulated/0/Pictures/JPEG_20140129_235544_1090805596.jpg: open failed: ENOENT (No such file or directory)
這是在setPic();但是在啓動intent時文件被保存並添加到圖庫中,所以在onActivityResult之前,它應該在那裏。你有沒有看到任何問題?此代碼是從Android devloper網站http://developer.android.com/training/camera/photobasics.html
static final int REQUEST_TAKE_PHOTO = 1001;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
private void galleryAddPic() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(mCurrentPhotoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
編輯這一個代碼塊是從onActivityResult採取:
else if ((requestCode == REQUEST_TAKE_PHOTO) && (resultcode == -1)){
// Uri selectedImage = imageUri;
mProfilePicPath = mCurrentPhotoPath;
mPortraitPhoto = setPic();
TextView tv = (TextView) findViewById(id.ProfilePicText);
tv.setText(mProfilePicPath);
//}
// }
}
}catch(Exception ex){
Log.d("shkdghrfb", ex.toString());
}
}
String mCurrentPhotoPath;
private Bitmap setPic() {
// Get the dimensions of the View
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
// Determine how much to scale down the image
//int scaleFactor = Math.min(photoW/targetW, photoH/targetH);
// Decode the image file into a Bitmap sized to fill the View
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = 5;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
//mImageView.setImageBitmap(bitmap);
return bitmap;
}
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
galleryAddPic();
return image;
}
清單權限我已經加入:
<uses-permission android:name="android.permission.CAMERA" android:required="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
這是你讓這個早晨相機的第三個問題,也許你應該試着去思考越來越少問....至少如果你想學習的課程。 – nsL
您是否在清單文件中添加了寫入和讀取外部存儲權限? – Piyush
@nsL我今天很多小時都在嘗試。在這種方式之前,我嘗試了許多不同的方式。這個問題一直讓我煩惱了一個星期。我做了一個不同的方式,我的另一部手機,但不是一些手機,所以不得不改變它。 – user3164083