2013年4月18日星期四

android讓使用者選圖並取得實體路徑


Android本身有Intent可以直接呼叫「圖片庫」程式,
讓使用者選擇想要的圖後,
再回傳讓程式進行後續處理。
程式碼如下:

 openFile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent( Intent.ACTION_PICK );
    // 過濾檔案格式
    intent.setType( "image/*" );
    // 建立 "檔案選擇器" 的 Intent (第二個參數: 選擇器的標題)
    Intent destIntent = Intent.createChooser( intent, baseActivity.getText(R.string.select_file) );
    // 切換到檔案選擇器 (它的處理結果, 會觸發 onActivityResult 事件)
    baseActivity.startActivityForResult( destIntent, BaseActivity.PICTURE_SELECTED);
}
});

使用者選擇完,回到程式後:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// after picture selected
if (requestCode == BaseActivity.PICTURE_SELECTED) {
 if (resultCode == RESULT_OK) {
  Uri uri = data.getData();
  System.out.println("mainActivity data="+data);
  System.out.println("mainActivity uri="+uri);
  String str = "DrawMyView"// Data you want to send
  
  }
 }
}

此時發現Log印出來的是類似
uri=content://media/external/images/media/23505
這樣的東西

如果需要對應回實體檔案的話,則需要再透過其他步驟,
程式碼如下:
private String getRealPathFromURI(Uri contentURI) {
    Cursor cursor = baseActivity.getContentResolver()
              .query(contentURI, nullnullnullnull); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    String name= cursor.getString(idx);
    cursor.close();
    return name;
}

此時就可以看到使用者選擇的圖片所存在的實體路徑。

没有评论:

发表评论