背景
代碼
先上布局文件:
<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