当前位置:首页 » 安卓系统 » android读取相册

android读取相册

发布时间: 2022-06-17 06:08:40

A. android开发: EditText中插入的相册图片如何保存在数据库里,查看的时候又如何读取

保存一个url是个不错的方法,然后加载的时候就可以根据路径去生成一个bitmap对象,再把这个对象显示到组件上 。如果知道路径,那么显示时调用BitmapFactory.decodeFile(String pathName)这个方法就行,参数为一个路径字符串.

B. 怎么获取指定手机存储相片的路径android

首先是相册图片的获取:

private final String IMAGE_TYPE = "image/*";
private final int IMAGE_CODE = 0; //这里的IMAGE_CODE是自己任意定义的

//使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片

Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
getAlbum.setType(IMAGE_TYPE);
startActivityForResult(getAlbum, IMAGE_CODE);

//重写onActivityResult以获得你需要的信息

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (resultCode != RESULT_OK) { //此处的 RESULT_OK 是系统自定义得一个常量
Log.e(TAG,"ActivityResult resultCode error");
return;
}

Bitmap bm = null;

//外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口
ContentResolver resolver = getContentResolver();

//此处的用于判断接收的Activity是不是你想要的那个
if (requestCode == IMAGE_CODE) {
try {
Uri originalUri = data.getData(); //获得图片的uri

bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); //显得到bitmap图片

这里开始的第二部分,获取图片的路径:

String[] proj = {MediaStore.Images.Media.DATA};

//好像是android多媒体数据库的封装接口,具体的看Android文档
Cursor cursor = managedQuery(originalUri, proj, null, null, null);
//按我个人理解 这个是获得用户选择的图片的索引值
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
//将光标移至开头 ,这个很重要,不小心很容易引起越界
cursor.moveToFirst();
//最后根据索引值获取图片路径
String path = cursor.getString(column_index);
}catch (IOException e) {
Log.e(TAG,e.toString());
}
}
}

C. 求:android 获取系统相册图片并显示在当前页面的代码

先初始化;

注意自定义 的

private final String IMAGE_TYPE = "image/*";private final int IMAGE_CODE = 0;


private void setImage() {
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE);}
这里使用Intent获得相册图片数据,并返回原来界面;

这里说明一下

startActivityForResult(getAlbum, IMAGE_CODE);

补充{

startActivityForResult与startActivity的不同之处在于:
1、startActivity( )
仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。
2、startActivityForResult( )
可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。

}

startActivityForResult(getAlbum, IMAGE_CODE);

这里采用startActivityForResult来做跳转,此处的IMAGE_CODE实质是0为一个依据,可以写其他的值,但一定要>=0

然后重写onActivityResult用于接收刚刚得到的数据

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm); } catch (IOException e) {
e.printStackTrace(); }
}

补充{
ContentProvider-----数据提供给第三方应用程序使用时使用
因为在Android系统里面,数据库是私有的。一般情况下外部应用程序是没有权限读取其他应用程序的数据。如果你想公开你自己的数据,你有两个选择:你可以创建你自己的内容提供器(一个ContentProvider子类)或者你可以给已有的提供器添加数据-如果存在一个控制同样类型数据的内容提供器且你拥有写的权限
}
这里是创建一个新的内容提供器,然后在Activity当中通过getContentResolver()可以得到当前应用的 ContentResolver实例

if (requestCode == IMAGE_CODE) {
resultCode为回传的标记这句话是在确认是否回传的是你所需要的;如果是就执行try;不然就执行catch (IOException e) {
e.printStackTrace();}先说这里当try语句中出现异常是时,会执行catch中的语句,IOException e也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;。printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。
try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm);接收数据处理数据并显示照片。
然后进行测试。


另附源码
MainActivity:
package com.example.administrator.myapplication1;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.io.IOException;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends AppCompatActivity { private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; private Button choose=null; private ImageView imgShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();} private void init() { choose=(Button) findViewById(R.id.button1); imgShow=(ImageView) findViewById(R.id.imgShow); choose.setOnClickListener(listener); } private OnClickListener listener=new OnClickListener(){ @Override public void onClick(View v) {
setImage(); }

}; private void setImage() {
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm); } catch (IOException e) {
e.printStackTrace(); }
}
}
}


layout:activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择照相" android:layout_marginRight="190dp" android:layout_marginTop="8dp" android:paddingBottom="2dp" android:background="#aabbcc" /> <ImageView android:id="@+id/imgShow" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="15dip" /></LinearLayout>

D. android中怎么读取系统相册

从图库contentprovider找到该图片对应的存储path,调用file的delete就行了。。

E. Android 开发中从相册读取的照片有时侯的方向不对,本来是竖屏的照片变成横屏了怎么办

可以读取相片的方向值,然后旋转
读取方向值请参照下面的代码:
ExifInterface exifInterface = new ExifInterface(bitmapUrl);
int tag = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
然后旋转:
int degree = 0;
if (orc == ExifInterface.ORIENTATION_ROTATE_90) {
degree = 90;
} else if (orc == ExifInterface.ORIENTATION_ROTATE_180) {
degree = 180;
} else if (orc == ExifInterface.ORIENTATION_ROTATE_270) {
degree = 270;
}
if (degrees != 0 && bitmap != null) {
Matrix m = new Matrix();
m.setRotate(degrees, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2);
}

F. android 调用相册的图片 图片无法找到 路径应该怎么写

先引入Environment类,然后调用getExternalStorageDirectory()函数获得sd卡路径,然后连接在你的filename前面,应该就可以解决.

具体:
import android.os.Environment;

......

File f = new File(Environment.getExternalStorageDirectory() + fileName);

其他用到fileName的地方类似.

另外,读写sd卡需要在AndroidManifest.xml文件内加入权限,具体:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

G. android怎样调用系统相册

使用系统自带的图片浏览器应用程序Gallery可以打开一张指定的图片,//使用IntentIntent intent = new Intent(Intent.ACTION_VIEW);//Uri mUri = Uri.parse("file://" + picFile.getPath());Android3.0以后最好不要通过该方法,存在一些小Bugintent.setDataAndType(Uri.fromFile(picFile), "image/*");startActivity(intent)

H. android中怎么跳转到相册获取照片并得到url

方法/步骤
1
如下图所示,需要根据URL地址获取图片加载到图中Anroid机器人所在的位置,这是运行前的效果:

2
首先需根据URL地址获取图片,如下所示,urladdr即为图片地址,返回Drawable对象:
//download image from network using @urladdress
private Drawable loadImageFromNetwork(String urladdr) {
// TODO Auto-generated method stub
Drawable drawable = null;
try{
//judge if has picture locate or not according to filename
drawable = Drawable.createFromStream(new URL(urladdr).openStream(), "image.jpg");
}catch(IOException e){
Log.d("test",e.getMessage());
}
if(drawable == null){
Log.d("test","null drawable");
}else{
Log.d("test","not null drawable");
}
return drawable;
}
3
获取到图片后,需要更新主线程UI资源,考虑到时间以及界面反应延迟等,所以采用线程加以处理,如下图所示:
// image
new Thread(new Runnable(){
Drawable drawable = loadImageFromNetwork(urladdress);
@Override
public void run(){
//post() is quite important,update pictures in UI main thread
image.post(new Runnable(){
@Override
public void run(){
//TODO Auto-generated method stub
image.setImageDrawable(drawable);
}
});
}

//download image from network using @urladdress
private Drawable loadImageFromNetwork(String urladdr) {
//... 略(如 1 中所示)
}
}).start(); //线程启动
4
说明:在上述示例代码中,image是ImageView类的一个对象,也就是APP中的一个显示图像组件,利用获取到的图片drawable去更新image,运行效果如下所示:

I. Android/如何读取相册将选择的图动态设置为应用背景

Bitmap bitmap = BitmapFactory.decodeFile(String path);
linearlayout.setBackground(new BitmapDrawable(bitmap));

J. android 怎么获取相册路径

android手机4.2版本之前是一个方法,大于4.2版本又是一个方法。

注意:现在手机市场android版本2015面上半年平均4.4,现在是平均5.0了。

  1. before

    你网络一下,都能查到,很简单.

  2. after

    private void startPickPhotoActivity() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("image/*"); // Or 'image/ jpeg '
    startActivityForResult(intent, RESULT_PICK_PHOTO_NORMAL);
    }


// 获得图片返回的路径
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == RESULT_PICK_PHOTO_NORMAL) {
if (resultCode == RESULT_OK && data != null) {

//选中图片路径

mFileName = MainActivity.getPath(getApplicationContext(),
data.getData());
if ("".equals(mFileName)) {
return;
}
Intent intent = new Intent(this, EditActivity.class);
intent.putExtra("pathName", mFileName);
startActivity(intent);
}
}
}

@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPath(final Context context, final Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (UriUtils.isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/"
+ split[1];
}

}
// DownloadsProvider
else if (UriUtils.isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
return UriUtils.getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (UriUtils.isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = MediaColumns._ID + "=?";
final String[] selectionArgs = new String[] { split[1] };
return UriUtils.getDataColumn(context, contentUri, selection,
selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
if (UriUtils.isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return UriUtils.getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}

热点内容
sql提示存储过程 发布:2025-05-17 07:35:58 浏览:743
qq里的互动访问 发布:2025-05-17 07:26:53 浏览:665
口语易账号密码发送到哪里 发布:2025-05-17 07:26:52 浏览:62
核桃编程幼儿 发布:2025-05-17 07:26:50 浏览:786
2台服务器集群搭建 发布:2025-05-17 07:18:57 浏览:185
北方园林配置植物有哪些 发布:2025-05-17 07:18:20 浏览:544
数控加工零件图及编程 发布:2025-05-17 07:18:11 浏览:730
炼钢碱度算法 发布:2025-05-17 07:17:26 浏览:14
python获取年月日 发布:2025-05-17 07:15:33 浏览:303
手机加密软件java 发布:2025-05-17 07:00:24 浏览:443