在 Android 中,选择相册照片并返回功能的实现代码通常涉及使用
Intent
来启动系统相册应用,并在 onActivityResult
方法中处理返回的照片。以下是一个简单的示例:“java,// 启动相册选择,Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);,startActivityForResult(intent, PICK_IMAGE_REQUEST);// 处理返回结果,@Override,protected void onActivityResult(int requestCode, int resultCode, Intent data) {, super.onActivityResult(requestCode, resultCode, data);, if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {, Uri imageUri = data.getData();, // 在这里处理选中的图片, },},
“一、布局文件(activity_main.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btn_open_gallery" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开相册" /> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/btn_open_gallery" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" /> </RelativeLayout>
二、MainActivity.java
1、添加权限:在AndroidManifest.xml
文件中添加读取外部存储的权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、请求运行时权限:从 Android 6.0(API level 23)开始,需要在运行时请求权限。
import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.InputStream; public class MainActivity extends AppCompatActivity { private static final int PICK_IMAGE_REQUEST = 1; private ImageView imageView; private Button btnOpenGallery; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); btnOpenGallery = findViewById(R.id.btn_open_gallery); btnOpenGallery.setOnClickListener(v -> { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); } else { openGallery(); } }); } private void openGallery() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_IMAGE_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) { Uri imageUri = data.getData(); try { InputStream inputStream = getContentResolver().openInputStream(imageUri); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); imageView.setImageBitmap(bitmap); } catch (Exception e) { e.printStackTrace(); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { openGallery(); } else { Toast.makeText(this, "需要存储权限来选择图片", Toast.LENGTH_SHORT).show(); } } } }
三、相关问题与解答
1、问题:如果用户没有授予存储权限会发生什么?
解答:如果用户没有授予存储权限,应用将无法访问设备的外部存储,因此无法打开相册选择图片,在这种情况下,通常会向用户显示一条消息,说明需要该权限才能继续操作。
2、问题:如何处理用户选择的图片?
解答:在onActivityResult
方法中,通过检查requestCode
和resultCode
来确定是否是从相册返回的结果,并且data
不为空,从data
中获取图片的Uri
,使用ContentResolver
和InputStream
来加载图片,并将其设置为ImageView
的源。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1620511.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复