先说一下如何获得本地图片的路径。
//点击图片事件
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,就会显示图片了。