0
我在三星注測試我的應用程序, 這裏是我如何用來調用相機相機活動返回null URI
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(captureIntent, CAMERA_CAPTURE);
然後在活動結果:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if(requestCode == CAMERA_CAPTURE)
{
picUri = data.getData();
//continue my code
}
}
}
但後來我最近將測試更改爲Galaxy Nexus,並且我注意到data.getData()現在返回null而不是臨時圖像uri。 我讀了幾條建議,都提到將相機活動的文件傳遞給新的iamge的位置。 現在我改變了代碼:
....
File photoFile = createImageFile();
//photoFile = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(captureIntent, CAMERA_CAPTURE);
....
使用方法
private File createImageFile() throws IOException
{
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
//File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "alboom");
//File storageDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "alboom");
//File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
//File storageDir = getFilesDir(); //not working
//File storageDir = getDir("mydir", Context.MODE_PRIVATE); //not working
//File storageDir = getCacheDir(); //not working
if (!storageDir.mkdirs()) //required if creating a new dir
Log.e(TAG, "Directory not created");
//File image = File.createTempFile(imageFileName, ".jpg", storageDir);
File image = new File(storageDir, imageFileName);
//File image = File.createTempFile(imageFileName, ".jpg"); //not working
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
和結果處理
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if(requestCode == CAMERA_CAPTURE)
{
picUri = Uri.fromFile(photoFile);
//continue my code
}
}
}
現在我的代碼工作很好,但只有當我寫外部存儲..內部存儲始終不會從相機活動返回。
我的問題是:
- 爲什麼不能我寫的內部存儲?
- 如何將「未隱藏」的圖像文件寫入外部存儲?
- 爲什麼舊代碼停止工作?
「爲什麼我不能寫入內部存儲?」 - 因爲相機應用無法訪問應用的內部存儲空間。 – CommonsWare 2014-09-22 14:45:49
是的。當你傳遞一個'EXTRA_OUTPUT'時,三星相機應用會從android 4.3返回null。但你真的不需要'data.getData()'Uri,因爲你已經知道Uri是什麼 – njzk2 2014-09-22 14:48:10
謝謝@CommonsWare – sunil 2014-09-22 14:57:46