2016-09-15 27 views
0

我在創建選擇器意圖時允許用戶選擇相機應用程序,圖庫應用程序或文件瀏覽器應用程序時遇到問題。Android選配器相機圖庫和文檔的意圖

到目前爲止,我只能拿相機+畫廊或相機+文件瀏覽器,但不是所有的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都會替換最後一個。 這是我的最終工作代碼(在三星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); 
}