2016-09-15 4 views
0

カメラアプリ、ギャラリーアプリ、またはファイルブラウザアプリのいずれかを選択できるようにするための選択肢の意図を作成できません。カメラのギャラリーと文書のAndroid Chooserの意図

これまでのところ、私は以下の方法でカメラ+ギャラリーやカメラ+ファイルブラウザではなく、すべての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); 
} 
関連する問題