[英]Android MediaStore.ACTION_IMAGE_CAPTURE and Intent.ACTION_PICK
[英]capturing images with MediaStore.ACTION_IMAGE_CAPTURE intent in android
我正在使用MediaStore.ACTION_IMAGE_CAPTURE意圖捕獲圖像。 它在大多數設備上運行良好。 但它在一些最新的Android設備中無法正常工作。
我的意圖是使用相機捕獲圖像並將其發送到服務器,但不將該圖像存儲在設備的默認庫中。
* * :當我捕獲圖像時,它會在onActivityResult方法中返回一些其他圖庫圖像,而不是在某些最新的Android設備中捕獲圖像。 我使用下面的代碼來捕獲和存儲圖像。
public void launchCamera(View v) {
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camera, CAMERA_PIC_REQUEST );
}
在onActivityResult方法中,
String[] projection = { MediaStore.Images.ImageColumns.SIZE,
MediaStore.Images.ImageColumns.DISPLAY_NAME,
MediaStore.Images.ImageColumns.DATA, BaseColumns._ID, };
Cursor c = null;
Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
try {
if (u != null) {
c = managedQuery(u, projection, null, null, null);
}
if ((c != null) && (c.moveToLast())) {
Bitmap thumbnail = getBitMapFromLocalPath(c.getString(2), 3);
idsImagesgot.add(thumbnail);
ContentResolver cr = getContentResolver();
cr.delete( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
BaseColumns._ID + "=" + c.getString(3), null);
}
} finally {
if (c != null) {
c.close();
}
}
任何人都可以在這方面幫助我。
提前致謝。
Sathish所在
ACTION_IMAGE_CAPTURE拍攝的照片未在所有設備上自動在MediaStore中注冊。
官方Android指南提供了這個示例: http : //developer.android.com/guide/topics/media/camera.html#intent-receive但是這在所有設備上都不起作用。
我所知道的唯一可靠方法是在局部變量中保存圖片的路徑。 請注意,您的應用程序可能在后台(在相機應用程序運行時)被殺死,因此您必須在onSaveInstanceState期間保存路徑。
評論后編輯:
創建臨時文件名,在啟動意圖時將存儲照片。
File tempFile = File.createTempFile("my_app", ".jpg");
fileName = tempFile.getAbsolutePath();
Uri uri = Uri.fromFile(tempFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, PICTURE_REQUEST_CODE);
fileName
是一個String,是您活動的一個字段。 你必須這樣保存:
@Override
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
bundle.putString("fileName", fileName);
}
並在onCreate()中恢復它:
public void onCreate(Bundle savedInstanceState)
{
if (savedInstanceState != null)
fileName = savedInstanceState.getString("fileName");
// ...
}
現在,在onActivityResult時,您知道存儲照片的文件的名稱( fileName
)。 您可以使用它執行任何操作,然后將其刪除。
2013-09-19編輯:似乎有些相機應用忽略了putExtra uri,並將圖片存儲在不同的地方。 因此,在使用fileName
的值之前,您應該檢查intent是否為null。 如果獲得非null意圖,那么您應該首選intent.getData()
不是fileName
。 僅在需要時才使用fileName
作為備份解決方案。
我的onActivityResult()方法看起來像這樣,它可以從MediaStore.ACTION_IMAGE_CAPTURE獲取圖像:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap mImageBitmap = (Bitmap) extras.get("data");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.