2016-09-15 12 views
0

У меня возникли проблемы с созданием намерения выбора, которое позволяет пользователям выбирать приложение камеры, приложение галереи или приложение для браузера файлов.Предположение Android для камеры Галерея и документы

До сих пор, я могу получить только камера + Gallery или Camera + File Browser, но не все 3 варианта

В приведенном ниже методе представляется как следующая строка игнорируется:

chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, galleryIntent); 

Код:

public void openUploadIntent() { 

    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String fname = "ABCD_" + timeStamp; 

    final File sdImageMainDirectory = new File(storageDir, fname); 
    outputFileUri = Uri.fromFile(sdImageMainDirectory); 

    // Camera. 
    final List<Intent> cameraIntents = new ArrayList<Intent>(); 
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    final PackageManager packageManager = getPackageManager(); 
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
    for(ResolveInfo res : listCam) { 
     final String packageName = res.activityInfo.packageName; 
     final Intent intent = new Intent(captureIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
     intent.setPackage(packageName); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     cameraIntents.add(intent); 
    } 


    //Gallery. 
    final Intent galleryIntent = new Intent(); 
    galleryIntent.setType("image/*"); 
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT); 
    //Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 


    // Filesystem. 
    final Intent fsIntent = new Intent(); 
    fsIntent.setType("*/*"); 
    fsIntent.setAction(Intent.ACTION_GET_CONTENT); 


    // Chooser of filesystem options. 
    final Intent chooserIntent = Intent.createChooser(fsIntent, "Select Source"); 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, galleryIntent); 

    // Add the camera options. 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.ize()])); 

    startActivityForResult(chooserIntent, 99999); 
} 

ответ

1

Ну, я понял. Похоже, что каждый вызов EXTRA_INTIAL_INTENTS заменяет последнее. Это мой последний рабочий код (на Samsung Galaxy S)

public void openImageIntent() { 

    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String fname = "ABCD_" + timeStamp; 

    final File sdImageMainDirectory = new File(storageDir, fname); 
    outputFileUri = Uri.fromFile(sdImageMainDirectory); 

    // Camera. 
    final List<Intent> cameraIntents = new ArrayList<Intent>(); 
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    final PackageManager packageManager = getPackageManager(); 
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
    for(ResolveInfo res : listCam) { 
     final String packageName = res.activityInfo.packageName; 
     final Intent intent = new Intent(captureIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
     intent.setPackage(packageName); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     cameraIntents.add(intent); 
    } 


    //Gallery. 
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

    // Filesystem. 
    final Intent fsIntent = new Intent(); 
    fsIntent.setType("*/*"); 
    fsIntent.setAction(Intent.ACTION_GET_CONTENT); 
    cameraIntents.add(fsIntent); 



    //Create the Chooser 
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source"); 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()])); 

    startActivityForResult(chooserIntent, 99999); 
}