背景
代码
先上布局文件:
<LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/hello_world"/> <ImageView android:id="@+id/pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:contentDescription="@string/app_name"/> </LinearLayout>
这里没有TextView,我最后是将路径以System.out.println方式输出的。
初始化:
button = (Button)findViewById(R.id.button); pic = (ImageView) findViewById(R.id.pic); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 System.out.println("onClick"); Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, 1); } });
对于startActivityForResult的回调函数进行覆写:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO 自动生成的方法存根 System.out.println(requestCode+""); if(requestCode==1) { //获得图片的uri Uri uri = data.getData(); //外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口 ContentResolver cr = this.getContentResolver(); Bitmap bitmap; //Bitmap bm; //这是一种方式去读取图片 try { //bm = MediaStore.Images.Media.getBitmap(cr, uri); //pic.setImageBitmap(bm); bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); pic.setImageBitmap(bitmap); System.out.println("GOOD");
//第一种方式去读取路径 //String[] proj = {MediaStore.Images.Media.DATA}; /* //好像是android多媒体数据库的封装接口,具体的看Android文档 Cursor cursor = managedQuery(uri, proj, null, null, null); //按我个人理解 这个是获得用户选择的图片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); //将光标移至开头 ,这个很重要,不小心很容易引起越界 cursor.moveToFirst(); //最后根据索引值获取图片路径 String path = cursor.getString(column_index); System.out.println(path); */
//第二种方式去读取路径 Cursor cursor =this.getContentResolver().query(uri, null, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String path = cursor.getString(column_index); System.out.println(path); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); System.out.println("BAD"); } } super.onActivityResult(requestCode, resultCode, data); }
最后的path就是路径。
我是天王盖地虎的分割线
源代码:http://pan.baidu.com/s/1dD1Qx01
OpenPic.zip
转载请注明出处:http://www.cnblogs.com/yydcdut/p/3720594.html