Android开发:如何获取选中图片名称并传递至其他Activity?
嘿,我来帮你搞定获取选中图片名称并传递到另一个Activity的需求~下面是具体的实现步骤和代码:
获取选中图片名称并传递到其他Activity的解决方案
第一步:从图片Uri中提取文件名
我们可以通过ContentResolver查询MediaStore,或者用DocumentFile(适配高版本)来获取图片的文件名。这里给出两种可行的实现方式:
方式一:MediaStore查询(通用适配所有版本)
修改你现有的onActivityResult方法,加入获取文件名的逻辑:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); String imageName = null; // 查询图片的显示名称 String[] projection = {MediaStore.Images.Media.DISPLAY_NAME}; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { imageName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME)); } cursor.close(); // 记得关闭Cursor避免内存泄漏 } try{ Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),uri); image.setImageBitmap(bitmap); // 获取到名称后,传递到目标Activity if (imageName != null) { Intent intent = new Intent(this, TargetActivity.class); // 替换成你的目标Activity类名 intent.putExtra("SELECTED_IMAGE_NAME", imageName); // 用自定义key传递数据 startActivity(intent); } } catch(IOException e) { e.printStackTrace(); } } }
方式二:DocumentFile适配高版本(Android 19+)
如果你的App主要面向Android 4.4及以上版本,可以用更简洁的DocumentFile方式:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); String imageName = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { DocumentFile documentFile = DocumentFile.fromSingleUri(this, uri); if (documentFile != null) { imageName = documentFile.getName(); } } else { // 低版本回退到MediaStore查询 String[] projection = {MediaStore.Images.Media.DISPLAY_NAME}; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { imageName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME)); } cursor.close(); } } try{ Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),uri); image.setImageBitmap(bitmap); // 传递文件名到目标Activity if (imageName != null) { Intent intent = new Intent(this, TargetActivity.class); intent.putExtra("SELECTED_IMAGE_NAME", imageName); startActivity(intent); } } catch(IOException e) { e.printStackTrace(); } } }
第二步:在目标Activity中接收文件名
在你的目标Activity(比如TargetActivity)的onCreate方法里,获取传递过来的文件名:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 获取传递过来的图片名称 String selectedImageName = getIntent().getStringExtra("SELECTED_IMAGE_NAME"); if (selectedImageName != null) { // 这里可以根据需求使用文件名,比如显示在TextView中 TextView imageNameTv = findViewById(R.id.tv_image_name); imageNameTv.setText("选中的图片:" + selectedImageName); } }
注意事项
- 别忘了在
AndroidManifest.xml中注册你的目标Activity哦。 - 高版本Android(10+)中,这种通过Uri获取文件名的方式不需要额外的存储权限,因为我们是通过系统提供的内容Uri来访问的,不用担心权限问题。
内容的提问来源于stack exchange,提问作者GingyBell
相关产品推荐
相关产品推荐

