博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
点击跳转到网站
前言:
简单写一个按钮,点击按钮访问相册,首先在AndroidManifest.xml清单文件中加入从外部读取文件的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
之后在MainActivity中实现所述功能,具体注释已经在代码中给出
btn_picture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//动态申请权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
} else {
//访问相册
InputPicture();
}
}
});
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
InputPicture();
} else {
Toast.makeText(this, "你拒绝打开此权限,无法进行下一步操作!", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private void InputPicture() {
//Intent.ACTION_PICK 从数据中选择一个项目 (item),将被选中的项目返回。
//MediaStore.Images.Media.EXTERNAL_CONTENT_URI 获取外部的URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
//参数一:对应的数据的URI 参数二:使用该函数表示要查找文件的MIME类型
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == 1 && 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);
Log.e("TAG", "onActivityResult: " + picturePath );
}
super.onActivityResult(requestCode, resultCode, data);
}
分析ContentResolver().query()方法中接收的这四个参数的含义:
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
Android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接利用ContentResolver去调用那些封装好的接口就可以进行数据库的操作了。
这里我们进行查询操作,这四个参数的具体含义如下:
点击按钮打开后的效果图如下:
onActivityResult:/storage/emulated/0/test.png