来源:https://blog.youkuaiyun.com/crescent__moon/article/details/78758605
先说一下如何获得本地图片的路径。
//点击图片事件
ib.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
getImageFromAlbum();
}
});
//调用本地图片库
protected void getImageFromAlbum(){
Intent i=new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i,2);
}
//获取本地图片路径并加载图片
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode==2&&resultCode==RESULT_OK){
Uri u=data.getData();
ContentResolver cr=AddActivity.this.getContentResolver();
try{
Bitmap bmp=BitmapFactory.decodeStream(cr.openInputStream(u));
ib.setImageBitmap(bmp);
String[]filePathColumn={MediaStore.Images.Media.DATA};
Cursor cursor=context.getContentResolver().query(u,
filePathColumn,null,null,null);
cursor.moveToFirst();
int columnIndex=cursor.getColumnIndex(filePathColumn[0]);
//Path就是图片在储存卡所在的位置
path=cursor.getString(columnIndex);
}catch(Exception e){
e.printStackTrace();
}
}
super.onActivityResult(requestCode,resultCode,data);
}
ImageView通过加载路径显示图片。
Bitmap bmp = BitmapFactory.decodeFile(path);
ib.setImageBitmap(bmp);
当然还要在AndroidManifest.xml文件中加入权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
但是即使是这样,ImageView仍然无法显示图片,可是路径是对的啊,权限也已经加上了啊。
AS会显示这个错误:
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Download/timg (2).jpg (Permission denied)
提示的错误就是没有加载这个图片的权限。
可是刚刚不是已经在AndroidManifest.xml这个文件中加入了吗?
通过一番调查发现,原来android6.0之后不仅需要在Mainfest里面添加权限,还需要添加运行时权限。
这样的话就得在程序中加入如下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
//允许开启访问本地文件权限
requestWritePermission();
init();
OnClick();
}
private void requestWritePermission(){
if (ActivityCompat.checkSelfPermission(AddActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(AddActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
}
这样的话在运行程序时,如果加载图片,它会有如下提示:
就是问你这个程序能否访问你的设备,此时点击ALLOW,就会显示图片了。
------------------------------------以上是转载内容-------------------------------------
对于imageView.setImageURI(uri);此方法同样有效,亲测可用!
只需:
private void requestWritePermission() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
和
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
就可以搞定啦!