sat*_*ish 10 android image capture android-intent
我正在使用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 );
}
Run Code Online (Sandbox Code Playgroud)
在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();
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以在这方面帮助我.
提前致谢.
Sathish所在
Rém*_*émi 32
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);
Run Code Online (Sandbox Code Playgroud)
fileName是一个字符串,是您活动的一个字段.你必须这样保存:
@Override
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
bundle.putString("fileName", fileName);
}
Run Code Online (Sandbox Code Playgroud)
并在onCreate()中恢复它:
public void onCreate(Bundle savedInstanceState)
{
if (savedInstanceState != null)
fileName = savedInstanceState.getString("fileName");
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,在onActivityResult时,您知道存储照片的文件的名称(fileName).您可以使用它执行任何操作,然后将其删除.
2013-09-19编辑:似乎有些相机应用忽略了putExtra uri,并将图片存储在不同的地方.因此,在使用值之前,fileName应检查intent是否为null.如果你得到一个非空的意图,那么你应该更喜欢intent.getData()了fileName.使用fileName的需要,只有当它备份解决方案.