相关疑难解决方法(0)

单一意图让用户拍照或从Android中的图库中选择图像

我正在为Android 2.1开发一个应用程序.我想让我的用户在我的应用程序中选择个人资料图片(我没有使用联系人框架).

理想的解决方案是启动一个使用户能够从图库中选择图像的意图,但如果没有合适的图像,则使用相机拍照(反之亦然,即允许用户拍照,但如果他们知道他们已经有了合适的图像,让他们进入画廊并选择所述图像).

目前我可以做其中一个但不能两个都做.

如果我使用MediaStore.ACTION_IMAGE_CAPTURE直接进入相机模式,则无法进入图库.

如果我使用Intent.ACTION_PICK直接进入图库,那么我可以选择一个图像,但是如果我单击相机按钮(在图库的右上角),则会触发新的相机意图.因此,拍摄的任何照片都不会直接返回给我的应用程序.(当然你可以按后退按钮退回到图库并从那里选择图像,但这是一个额外的不必要的步骤,并不是很直观).

那么有没有办法将两者结合起来,或者我是否必须提供一个菜单来从我的应用程序中做一个或另一个?看起来这将是一个常见的用例...当然我错过了什么?

camera android image gallery android-intent

66
推荐指数
3
解决办法
4万
查看次数

Exif数据TAG_ORIENTATION始终为0

我需要知道图库中图像的方向(由相机拍摄).我最初的方法是使用适用于我的Droid 1的MediaStore.Images.Media.ORIENTATION.在HTC Thunderbolt上测试时,手机只能将0保存到该字段.

然后我开始阅读exif数据:

 ExifInterface exifReader = new ExifInterface(mFilePath);
 exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
Run Code Online (Sandbox Code Playgroud)

这也为每个图像返回0.任何人都有关于如何正确获取Android照片的方向的想法?

camera android exif photo orientation

24
推荐指数
2
解决办法
3万
查看次数

使用FileProvider从Gallery中选择图像文件

为Android N编译我遇到了一个问题FileProvider.我需要让用户从相册中选择图像/用相机拍照然后将其裁剪成方形.

我已经成功实现了FileProvider用相机拍摄图像,但是从图库中选择图像时遇到了严重的问题.问题是在库中有很多来自不同地方的文件,例如我有Exception:

  java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/6133-3766/DCIM/100ANDRO/DSC_0035.JPG
Run Code Online (Sandbox Code Playgroud)

所以问题是,我可以把什么放到file_paths.xml来访问任何地方/storage/.我不能依赖于确切的路径,因为可能有来自WhatsApp和类似应用程序的图片,例如WhatsApp图像获取此路径:

/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20160821-WA0000.jpg
Run Code Online (Sandbox Code Playgroud)

我已设法解决空路径:

<external-path name="external_storage" path=""/>

其类似于Environment.getExternalStorageDirectory()根据文档.

但仍然无法弄清楚如何处理存储在其中的图像/storage/SOME_DIR/.请帮忙.

android android-gallery android-fileprovider

19
推荐指数
1
解决办法
5308
查看次数

来自相机或画廊的图片?

我有一个意图选择器,允许我从画廊或相机中选择图像,如下所示:

    Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT,null);
    galleryIntent.setType("image/*");
    galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 


    Intent chooser = new Intent(Intent.ACTION_CHOOSER);
    chooser.putExtra(Intent.EXTRA_INTENT, galleryIntent);      
    chooser.putExtra(Intent.EXTRA_TITLE, "title");

    Intent[] intentArray =  {cameraIntent}; 
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
    startActivityForResult(chooser,REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

我希望我的onActivityResult方法是这样的:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(Condition == picture_coming_from_gallery)
    {
     //my code here
    }
    else if(condition == picture_coming_from_camera)
    {
     //another code here
    }
}
Run Code Online (Sandbox Code Playgroud)

是什么条件让我知道我的图像来自哪个来源?

更新:

现在它正在运行,这是解决方案:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
    { …
Run Code Online (Sandbox Code Playgroud)

android gallery android-intent android-camera-intent

16
推荐指数
1
解决办法
2万
查看次数

Android:从Intent获取App-Name

我目前正在研究多图像选择器控件.我正在使用此允许用户为图像解决方案选择相机或图库,以生成用户从中选择一个可能的意图列表.

如下所示:

List<ResolveInfo> listGall = packageManager.queryIntentActivities(gallIntent, 0);
for (ResolveInfo res : listGall) {
    final Intent finalIntent = new Intent(gallIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName,     res.activityInfo.name));
yourIntentsList.add(finalIntent);
}
Run Code Online (Sandbox Code Playgroud)

但我可以通过ResolveInfo及其属性解析的所有名称都不是用户友好的标签.所以我正在寻找获取给定活动的启动器名称的方法.

java android android-intent android-activity

12
推荐指数
1
解决办法
7242
查看次数

意图在Android中的相机或图库之间进行选择

我正试图发起一个意图从相机或Android的画廊中选择一个图像.我检查过这篇文章,目前我的代码即将开始工作:

private Intent getPickIntent() {
    final List<Intent> intents = new ArrayList<Intent>();
    if (allowCamera) {
        setCameraIntents(intents, cameraOutputUri);
    }
    if (allowGallery) {
        intents.add(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI));
    }

    if (intents.isEmpty()) return null;
    Intent result = Intent.createChooser(intents.remove(0), null);
    if (!intents.isEmpty()) {
        result.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new Parcelable[] {}));
    }
    return result;
}

private void setCameraIntents(List<Intent> cameraIntents, Uri output) {
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    final PackageManager packageManager = context.getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for (ResolveInfo res : listCam) {
        final String packageName = …
Run Code Online (Sandbox Code Playgroud)

java android android-intent

11
推荐指数
2
解决办法
8081
查看次数

在相机和图库之间选择图像选择

我试图让用户从图库中选择图像,或者用相机拍照.我试过这个:

        Intent imageIntent = new Intent(Intent.ACTION_GET_CONTENT);
        imageIntent.setType("image/*");
        startActivityForResult(Intent.createChooser(imageIntent, "Select Picture"), GET_IMAGE_REQUEST);
Run Code Online (Sandbox Code Playgroud)

但它自动显示图库,甚至没有提供选择活动的选项.似乎应该有一些更好的方法来实现这个,而不是在这个问题中给出的解决方案.这真的是唯一的方法吗?

android android-intent android-gallery android-camera android-intent-chooser

7
推荐指数
2
解决办法
6462
查看次数

使用Thread获取图像资源时,Intent选择器保持打开状态

我正在构建一个照片上传表单,该表单必须从相机或图库或任何其他可用资源(Dropbox/Google Drive/Astro文件管理器等)获取图像.我认为除了一个小组件外我都能正常工作.

当所选图像来自网络资源(例如Google云端硬盘)时,可能需要很长时间才能返回活动.我想使这个异步,以避免用户在图像下载时盯着黑屏.

我写了很多代码来完成整个工作,但这是它的一般过程:

  1. 活动开始并显示表单.

  2. Intent选择器自动打开并要求用户从相机或其他应用程序中选择图像.

  3. 用户选择某些应用程序(如Google云端硬盘),选择图像并关闭该应用,然后返回所选图像Uri作为结果.

  4. 缓存文件的内容以解决方法KitKat权限,如果活动关闭并需要恢复,则可以阻止重新读取图像.

  5. 使用缓存文件作为源异步显示缩放位图.

  6. Intent选择器关闭,图像显示在ImageButton中,并且表单对用户可见,在提交之前填写.

  7. 点击提交按钮后,将启动异步任务,允许将多部分上载到服务器.

  8. 异步上载使用回调函数来通知用户上载进度.

我陷入了#3和#4之间的过渡期.

如果我使用Thread或AsyncTask Intent选择器将保持打开状态,但图像也将显示在表单上.

如果我只是强迫用户等待(连续) 用户被卡住看黑屏,则意图选择器关闭,图像显示在表单上.

打开Intent选择器

/**
 * see http://stackoverflow.com/a/12347567/940217
 */
private void openImageIntent() {

    // Camera.
    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final PackageManager packageManager = getPackageManager();
    Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    File photoFile;
    try {
        uploadableImage.makeCameraTempFile();
        photoFile = uploadableImage.getCameraTempFile();
        uploadableImage.setCameraFilepath(photoFile.getAbsolutePath());
    } catch (IOException ex) {
        // Error occurred while creating the File
        photoFile = null;
        uploadableImage.invalidate();
        Log.e(TAG, "Error while creating the temporary file needed …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

5
推荐指数
1
解决办法
692
查看次数

用android相机拍照

我已经创建了自己的控制器,用Android相机拍照.我的问题是输出显示的图像比预期的要小.我已经检查了我的位图的宽度和高度,如下所示:

int w = bmp.getWidth();
int h = bmp.getHeight();
Run Code Online (Sandbox Code Playgroud)

这个输出w = 480h = 640我假设是在像素的尺寸.这是我拍摄照片的方法

public void takePicture() {
        Log.i("Camera View: ", "Take Picture");
        camera.takePicture(null, null, new PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                if (null != callback) {
                    callback.onJpegPictureTaken(data, camera);

                }
            }
        });
 }
Run Code Online (Sandbox Code Playgroud)

Activity订阅此活动的地方onJpegPictureTaken

    @Override
    public void onJpegPictureTaken(byte[] data, Camera camera) {
        Intent i = new Intent(this, ImageEditing.class);
        i.putExtra("image", data);
        startActivity(i);
    }
Run Code Online (Sandbox Code Playgroud)

这样做的目的是启动一个新Activity的以编辑图像,如缩放和拖动.这个ImageEditing.class得到如下图片:

flipped = flipByteArrayNintyDegress(getIntent().getExtras()
                .getByteArray("image")); …
Run Code Online (Sandbox Code Playgroud)

android

2
推荐指数
1
解决办法
1711
查看次数