2011-02-05 2 views
0

Как я могу получить пользователя, чтобы выбрать из собственной галереи в Android, а не в других подобных галерее приложениях, таких как ASTRO File Manager?Доступ к базовой галерее 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 File Manager), ему предлагается выбрать один из них без опции «установить по умолчанию».

Я не хочу, чтобы пользователю предлагалось выбирать между ними каждый раз, поэтому я хотел бы просто использовать родную галерею.

Hacky код ниже пример использует белый список, чтобы проверить наличие известных нативных имен галереи:

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() –

Смежные вопросы