android-如何读取手机中相册的图像文件

问题描述

如何读取手机中相册的图像文件

对于以下的代码片段出现一个问题。实际上我是想读取手机中相册的图片。文件名为image2.jpg ,image3.jpg 的图片。但是报出了错误。
代码是:

public static Uri getRandomImage(ContentResolver resolver) {

    String secondo = "image2.jpg";
    String terzo = "image3.jpg";
    String quarto = "image4.jpg";
    String quinto = "image5.jpg";
    String sesto = "image6.jpg";
    String settimo = "image7.jpg";
    String ottavo = "image8.jpg";

    String[] projection = new String[] {
        BaseColumns._ID,
        MediaColumns.DATA,

    };

    Uri uri = Media.EXTERNAL_CONTENT_URI;

    Cursor cursor =  Media.query(resolver, uri, projection, null, MediaColumns._ID);
    if (cursor == null || cursor.getCount() <= 0) {
            return null;
    }

    cursor.moveToPosition(new Random().nextInt(cursor.getCount()));

    String completefilepath = cursor.getString(cursor.getColumnIndex(MediaColumns.DATA));
    if(completefilepath == secondo || completefilepath == terzo || completefilepath == quarto ||
            completefilepath == quinto || completefilepath == sesto || completefilepath == settimo ||
            completefilepath == ottavo){

        string = cursor.getString(1);

    }
    return Uri.withAppendedPath(uri, string);
}

LOGCAT:

E/AndroidRuntime(9147): FATAL EXCEPTION: main
E/AndroidRuntime(9147): java.lang.IllegalStateException: Unknown URL: content://media/external/images/media/null
E/AndroidRuntime(9147):     at android.os.Parcel.readException(Parcel.java:1268)
E/AndroidRuntime(9147):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
E/AndroidRuntime(9147):     at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:125)
E/AndroidRuntime(9147):     at android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:538)
E/AndroidRuntime(9147):     at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:467)
E/AndroidRuntime(9147):     at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:380)
E/AndroidRuntime(9147):     at it.bisemanuDEV.slidepuzzle.TileView.getImageFromUri(TileView.java:559)
E/AndroidRuntime(9147):     at it.bisemanuDEV.slidepuzzle.TileView.newGame(TileView.java:156)
E/AndroidRuntime(9147):     at it.bisemanuDEV.slidepuzzle.SlidePuzzleActivity.onOptionsItemSelected(SlidePuzzleActivity.java:377)
E/AndroidRuntime(9147):     at android.app.Activity.onMenuItemSelected(Activity.java:2762)
E/AndroidRuntime(9147):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730)
E/AndroidRuntime(9147):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
E/AndroidRuntime(9147):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
E/AndroidRuntime(9147):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
E/AndroidRuntime(9147):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
E/AndroidRuntime(9147):     at android.view.View$PerformClick.run(View.java:8819)
E/AndroidRuntime(9147):     at android.os.Handler.handleCallback(Handler.java:603)
E/AndroidRuntime(9147):     at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(9147):     at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(9147):     at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(9147):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(9147):     at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(9147):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(9147):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(9147):     at dalvik.system.NativeStart.main(Native Method)

解决方案

你可以参考这个方法,然后再自己变通一下
XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/imgView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"></ImageView>
    <Button
        android:id="@+id/buttonLoadPicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="Load Picture"
        android:layout_gravity="center"></Button>
</LinearLayout>

class文件:

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class ImageGalleryDemoActivity extends Activity {

    private static int RESULT_LOAD_IMAGE = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture);
        buttonLoadImage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Intent i = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                startActivityForResult(i, RESULT_LOAD_IMAGE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            ImageView imageView = (ImageView) findViewById(R.id.imgView);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        }
    }
}

解决方案二:

这个错好像是因为你的手机的保存图片的数据库中没有上述匹配的图片,所以string为空的,故当拼接的时候会出现null

解决方案三:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                photoPickerIntent.setType("image/*");
                startActivityForResult(photoPickerIntent, int requestCode);
时间: 2024-09-15 06:10:30

android-如何读取手机中相册的图像文件的相关文章

读取短信-我想读取手机中以BN开头的短信,谁能给我指导下代码怎么写?感激不尽啊

问题描述 我想读取手机中以BN开头的短信,谁能给我指导下代码怎么写?感激不尽啊 做的东西中要求读取手机中以BN开头的短信,谁能给我指导下代码怎么写, 解决方案 想要读取手机中以BN开头的短信,首先你要先能读到短信的完整内容.这个你做得到不? 如果能,对读到的内容前两个字节进行判断,看看是否是 BN: 如果不能,你就要去看看手机:(1)OS?(2)不同 OS下读取SMS的方法?

Android实现读取相机(相册)图片并进行剪裁_Android

我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了 在开发一些APP的过程中,我们可能涉及到头像的处理,比如从手机或者相册获取头像,剪裁成自己需要的头像,设置或上传头像等.网上一些相关的资料也是多不胜数,但在实际应用中往往会存在各种问题,没有一个完美的解决方案.由于近期项目的需求,就研究了一下,目前看来还没有什么问题. 这里我们只讨论获取.剪裁与设置,上传流程根据自己的业务需求添加.

Android实现读取相机(相册)图片并进行剪裁

我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了 在开发一些APP的过程中,我们可能涉及到头像的处理,比如从手机或者相册获取头像,剪裁成自己需要的头像,设置或上传头像等.网上一些相关的资料也是多不胜数,但在实际应用中往往会存在各种问题,没有一个完美的解决方案.由于近期项目的需求,就研究了一下,目前看来还没有什么问题. 这里我们只讨论获取.剪裁与设置,上传流程根据自己的业务需求添加.

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 view plaincopy to clipboardprint? PackageManager packageManager = this.getPackageManager();  List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);  PackageManager packageManager =

android直接读取项目中的sqlite数据库

最近项目中要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子.主要是输入英语到数据库中查询相应的汉语意思,将其答案输出.数据库采用sqlite3. 实现过程完全是按照参考文章中所述.其中要说明的是,程序在第一次启动的时候,会把数据库安装到内存卡上面,从而可以读却数据库.   package com.easymorse; import java.io.File; import java.io.FileOutputStream; import java.io.InputSt

adb command-如何读取Android手机中的DRAM的制造商信息

问题描述 如何读取Android手机中的DRAM的制造商信息 当前需要提供一个Adb Command,在Factory Test时用来读取Android中的RAM 制造商信息(VendroID 或者Manufacturer ID),类似在linux中用lshw -C memory得到的信息中的Verdor查找了些资料,没什么头绪,请指点一二,thank you.

sqlite-android读取手机联系人并在textview中显示名字时中文乱码怎么解决?

问题描述 android读取手机联系人并在textview中显示名字时中文乱码怎么解决? android读取手机联系人并在textview中显示名字时中文乱码怎么解决?从数据库里来的中文的全变成"?"了,其他的正常. 解决方案 new String(lCursor.getBlob(indexName), "UTF-8").replace("", "").replace("r", "");

android 文件读取-Android文件读取问题,读取不到电脑硬盘中的文件

问题描述 Android文件读取问题,读取不到电脑硬盘中的文件 我在Android项目中读取电脑D盘中的文件,D盘中文件存在,New File的时候文件找不到呢,我建了个java项目可以找到,是不是Android项目中不能读取电脑硬盘中的文件啊? 解决方案 楼主解决了吗.....我也遇到了这个问题 解决方案二: 好吧 楼主我解决了 Android 项目开发中 虽然存在D盘 但是虚拟机和真机Debug的时候 手机里都没有D盘呀 所以Java项目可以找到这个文件而项目无法读取D盘的文件

Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/18730223),请尊重他人的辛勤劳动成果,谢谢! 写这篇文章之前,先简单说几句,首先是先恭喜下自己获得了2013年的博客之星称号,很意外也很开心,自己是从2013年开始写博客,那时候也不知道怎么写,我从小就不喜欢写日记,作文什么的,所以刚开始都是贴代码,也没有人看,后面慢慢的,写的文章被推荐博客首页和CSDN首页(这里也要小小的感谢下小编MM),访问量逐渐