首页 > 其他分享 >如何在Android中获取图片路径

如何在Android中获取图片路径

时间:2023-10-19 15:14:14浏览次数:33  
标签:String 路径 uri 获取 Intent intent Android final

Android中获取图片路径的方法

在Android开发中,获取图片路径是一个常见的需求。下面介绍几种途径来实现获取图片路径的方法。

途径一:从相册中获取图片路径

要从相册中获取图片的路径,我们需要调用相应的系统接口实现。具体步骤如下:

    1. 在Manifest文件中添加获取相册的权限:

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

    1. 调用系统相册,获取图片路径:

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);

    1. 在onActivityResult方法中返回图片路径:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_PICK_IMAGE) {
Uri uri = data.getData();
String imagePath = getPathFromUri(uri);
// do something with imagePath
}
}

根据Uri获取文件路径的方法:

private String getPathFromUri(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
cursor.close();
return path;
}

途径二:从拍照中获取图片路径

如果我们需要从拍照中获取图片,也可以调用相应的系统接口来实现。具体步骤如下:

    1. 在Manifest文件中添加获取拍照的权限和文件读写权限:

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

    1. 调用系统相机拍照:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO);
}

在onActivityResult方法中返回相机拍照后的图片路径:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_TAKE_PHOTO) {
Uri uri = data.getData();
String imagePath = getPathFromUri(uri);
// do something with imagePath
}
}

根据Uri获取文件路径的方法同上。

途径三:从文件目录中获取图片路径

我们还可以从自己的文件目录中获取已保存的图片路径,具体步骤如下:

    1. 保存图片到文件目录:

// 将图片转换为Bitmap
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image);
// 获取文件存储路径
File filesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = new File(filesDir, "image.jpg");
// 保存图片到文件
OutputStream outputStream = new FileOutputStream(imageFile);
image.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();

    1. 获取已保存的图片路径:

File filesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = new File(filesDir, "image.jpg");
String imagePath = imageFile.getAbsolutePath();
// do something with imagePath

 Environment.getExternalStorageDirectory().toString()就是获取sd卡的绝对路径,由于android各个版本不同,返回的路径也可能不相同,

使用BitmapFactory来构建一个Bitmap对象,这个对象是可以直接应用于imageView的
创建方法BitmapFactory.decodeFile("图片路径")或Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

 Ⅲ android 怎么获取相册路径

  1. 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;
}

 

Ⅶ 如何获得android assert 里图片的绝对路径

第一种方法:
String path = "file:///android_asset/文件名";
第二种方法:
InputStream abpath = getClass().getResourceAsStream("/assets/文件名");
若要想要转换成String类型
String path = new String(InputStreamToByte(abpath ));
private byte[] InputStreamToByte(InputStream is) throws IOException {
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
int ch;
while ((ch = is.read()) != -1) {
bytestream.write(ch);
}
byte imgdata[] = bytestream.toByteArray();
bytestream.close();
return imgdata;
}

 Ⅷ 安卓怎么根据图片路径调用系统相册查看这个图片 //使用Intent
Intent intent = new Intent(Intent.ACTION_VIEW);
//Uri mUri = Uri.parse("file://" + picFile.getPath());Android3.0以后最好不要通过该方法,存在一些小Bug
intent.setDataAndType(Uri.fromFile(picFile), "image/*");
startActivity(intent);

标签:String,路径,uri,获取,Intent,intent,Android,final
From: https://www.cnblogs.com/skynight/p/17774732.html

相关文章

  • PHP如何获取本周所有的日期
    /***签到记录*/publicfunctiongetSignlog(){//获取本周第一天的时间戳$first_day_of_week=strtotime('thisweekMonday');//获取本周最后一天的时间戳$last_day_of_week=strtotime('thisweekSunday');......
  • mysql 日期时间值中获取年、月、日等部分日期或时间值
    在MySQL中,可以使用一系列内置函数来从日期时间值中获取年、月、日等部分日期或时间值。以下是一些常用的函数:YEAR():用于从日期时间值中提取年份。例如,SELECTYEAR('2023-06-12')将返回2023。MONTH():用于从日期时间值中提取月份。例如,SELECTMONTH('2023-06-12')将返回6。DAY():......
  • 多源最短路径的原理及C++实现
    时间复杂度O(n3),n是端点数。核心代码template<classT,TINF=1000*1000*1000>classCNeiBoMat{public:CNeiBoMat(intn,constvector<vector<int>>&edges,boolbDirect=false,boolb1Base=false){m_vMat.assign(n,vector<int>......
  • 存在负权边的单源最短路径的原理和C++实现
    负权图此图用朴素迪氏或堆优化迪氏都会出错,floyd可以处理。负环图 但floyd无法处理负权环,最短距离是无穷小。在环上不断循环。经过k条边的最短距离(可能有负权变)贝尔曼福特算法(bellman_ford)就是解决此问题的。原理循环k次,循环第i次时,m_vDis表示各点最多经过i-1条边的最短距离;v......
  • 堆优化迪氏最短单源路径原理及C++实现
    时间复杂度O(ElogE),E是边数。适用与稀疏图。使用前提边的权为正。可以非连通,非连通的距离为-1。原理优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果距离相等,先处理谁都可以。可以用pair记录,不用重写小于。优先队列只记录如下情况的距离:一,{0,源点}。二,......
  • 朴素迪氏最短单源路径的原理及C++实现
    Dijkstra算法,翻译为迪杰斯特拉或狄克斯特拉。在下驽钝,记不住如此长的翻译,故简称迪氏。时间复杂度O(n2),端点数的平方。使用前提边的权为正。可以非连通,非连通的距离为-1。原理源点到源点的最短路径只有一个节点{s}。除源点本身外,其它端点的最短路径至少有两个端点,整个路径{s...x2}可......
  • 最新Unity 如何打包发布到Android
    Unity打包Android现在UnityHub已经做的非常好了,可以直接下载对应Unity版本所对应得JDK,NDK,SDK,直接可以通过unityhub下载避免了,各种版本不同导致的编译问题,大大的降低了初学者的打包发布的难度,本文详细讲解UnityAndroid打包以及在打包中间需要理解的点, 如下:(1) Unityhu......
  • Windows git bash 命令行提示主机、用户、路径等默认信息 修改
    全局说明命令提示行,默认显示主机、用户、路径等信息,但是有时候截图,有意无意的就会泄露一些信息,被人看到时,太暴露隐私。这个显示右PS1这个变量来管理的,所以就在~/.bash_profile文件里修改想要的样式就可以一、环境下默认的特殊符号所代表的意义:\u:当前用户的账号名称\w:完......
  • vue中的for循环中,获取input输入框中的值的方法
    1<pv-for="iteminlist":key="item.id">2{{item.topic}}=3<!--<inputtype="text"v-model="item.id"placeholder="请输入答案">-->4......
  • Android转行的第一顺位是智能座舱?
    前言智能座舱是汽车中负责提供驾乘人员舒适性和安全性的部分,其包括了许多功能,如操控系统、娱乐系统、空调系统、通信系统、座椅系统、交互系统、感知系统等。在这些功能的实现上,AndroidFramework系统发挥着重要的作用。Android系统是一种基于Linux的开放源代码操作系统,广泛应用于......