2011-02-05 61 views
0

如何讓用戶從Android的本地圖庫中選擇,而不是像ASTRO文件管理器那樣的其他圖庫類應用程序?通過intent訪問Android本地圖庫

下面的代碼提供一個活動的列表,可以選擇圖像:

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
List<ResolveInfo> infos = activity.getPackageManager().queryIntentActivities(intent, 0); 

如果我那麼做這樣的事情:

activity.startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_CHOOSE_IMAGE); 

那麼如果用戶有多個應用程序,可以像一個畫廊(如ASTRO文件管理器),他/她會被提示選擇其中的一個,而沒有「設置爲默認」選項。

我不希望每次都提示用戶選擇它們,所以我只想使用本地圖庫。

下面的哈克代碼示例使用白名單來測試已知天然像冊名:

for (ResolveInfo info : infos) { 
     if ( 0==info.activityInfo.name.compareTo("com.cooliris.media.Gallery") 
      || 0==info.activityInfo.name.compareTo("com.htc.album.CollectionsActivity") 
     ) { 
      // found the native gallery 
      doSomethingWithNativeGallery(); 
     } 
    } 

感覺有點髒。有沒有更好的辦法?我懷疑我錯過了一些我的意圖。

回答

0

我沒有得到你的代碼的最後一部分。

要啓動本機gallry我所做的是 -

public void upload(){ 
      Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      photoPickerIntent.setType("image/jpg"); 
      photoPickerIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/Pictures/image.jpg")); 
      startActivityForResult(photoPickerIntent, 1); 

    } 

呼叫上傳()你喜歡的地方開始原生圖庫。

然後來獲取圖像信息我沒有 -

 /** 
* Retrieves the returned image from the Intent, inserts it into the MediaStore, which 
* automatically saves a thumbnail. Then assigns the thumbnail to the ImageView. 
* @param requestCode is the sub-activity code 
* @param resultCode specifies whether the activity was cancelled or not 
* @param intent is the data packet passed back from the sub-activity 
*/ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (resultCode == RESULT_CANCELED) { 
     return; 
    } 
    else if(resultCode == RESULT_OK) { 
     Uri uri = intent.getData(); 

     String path = getPath(uri); 
     Log.i("PATH", path); 
     data = path; 

        return; 
    } 
    uplad(); 
} 



    public String getPath(Uri uri) { 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 

如果你不會得到你的答案,清楚你喜歡做

+0

這不起作用的東西 - 它不會從選擇可能安裝了多個類似圖庫的應用程序 - 也可以使用ASTRO安裝。此外,你不應該直接引用SD卡 - 而是使用Environment.getExternalStorageDirectory() – 2011-02-06 01:05:45