it-swarm.com.de

Öffnen Sie die Galerie-App von Android Intent

Ich suche nach einer Möglichkeit, die Android-Galerie-Anwendung aus einer Absicht heraus zu öffnen.

Ich möchte kein Bild zurückgeben, sondern nur die Galerie öffnen, damit der Benutzer das Bild so verwenden kann, als würde es vom Launcher ausgewählt (View pictures/folders).

Ich habe folgendes versucht:

Intent intent = new Intent();  
intent.setAction(Android.content.Intent.ACTION_GET_CONTENT);  
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Dies führt jedoch dazu, dass die Anwendung geschlossen wird, sobald ich ein Bild auswähle (ich weiß, dass dies auf den ACTION_GET_CONTENT zurückzuführen ist), aber ich muss nur die Galerie öffnen.

Jede Hilfe wäre toll.

Vielen Dank

21
Dfranc3373

Das brauchen Sie:

ACTION_VIEW

Ändern Sie Ihren Code in:

Intent intent = new Intent();  
intent.setAction(Android.content.Intent.ACTION_VIEW);  
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
19
Umitk

Ich hoffe, dies wird dir helfen. Dieser Code funktioniert für mich.

Intent i = new Intent(Intent.ACTION_PICK,Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 startActivityForResult(i, RESULT_LOAD_IMAGE);

ResultCode wird verwendet, um das ausgewählte Bild in der Galerie-Ansicht zu aktualisieren

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
            && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);

        if (cursor == null || cursor.getCount() < 1) {
            return; // no cursor or no record. DO YOUR ERROR HANDLING
        }

        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);

        if(columnIndex < 0) // no column index
            return; // DO YOUR ERROR HANDLING

        String picturePath = cursor.getString(columnIndex);

        cursor.close(); // close cursor

        photo = decodeFilePath(picturePath.toString());

        List<Bitmap> bitmap = new ArrayList<Bitmap>();
        bitmap.add(photo);
        ImageAdapter imageAdapter = new ImageAdapter(
                AddIncidentScreen.this, bitmap);
        imageAdapter.notifyDataSetChanged();
        newTagImage.setAdapter(imageAdapter);
    }
30
Bebin T.N

Sie können die Galerie mit folgender Absicht öffnen:

public static final int RESULT_GALLERY = 0;

Intent galleryIntent = new Intent(
                    Intent.ACTION_PICK,
                    Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent , RESULT_GALLERY );

Wenn Sie den Ergebnis-URI abrufen oder andere Aktionen ausführen möchten, verwenden Sie Folgendes:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case QuestionEntryView.RESULT_GALLERY :
        if (null != data) {
            imageUri = data.getData();
            //Do whatever that you desire here. or leave this blank

        }
        break;
    default:
        break;
    }
}

Getestet auf Android 4.0 und höher

9
Milan
  1. Folgendes kann in Aktivität oder Fragment verwendet werden.

     private File mCurrentPhoto;
    
  2. Berechtigungen hinzufügen

    <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"  />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" Android:maxSdkVersion="18" />
    
  3. Intents hinzufügen, um "Bildauswahl" und "Fotoerfassung" zu öffnen 

    //A system-based view to select photos.
    private void dispatchPhotoSelectionIntent() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    this.startActivityForResult(galleryIntent, REQUEST_IMAGE_SELECTOR);
    }
    
    
    
        //Open system camera application to capture a photo.
        private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // Ensure that there's a camera activity to handle the intent
    if (takePictureIntent.resolveActivity(App.Instance.getPackageManager()) != null) {
        try {
            createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }
        // Continue only if the File was successfully created
        if (mCurrentPhoto != null) {
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhoto));
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }
    }
    
  4. Fügen Sie die Handhabung hinzu, wenn Sie ein Foto erhalten.

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case REQUEST_IMAGE_SELECTOR:
        if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = App.Instance.getContentResolver().query(data.getData(), filePathColumn, null, null, null);
            if (cursor == null || cursor.getCount() < 1) {
                mCurrentPhoto = null;
                break;
            }
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            if(columnIndex < 0) { // no column index
                mCurrentPhoto = null;
                break;
            }
            mCurrentPhoto = new File(cursor.getString(columnIndex));
            cursor.close();
        } else {
            mCurrentPhoto = null;
        }
        break;
    case REQUEST_IMAGE_CAPTURE:
        if (resultCode != Activity.RESULT_OK) {
            mCurrentPhoto = null;
        }
        break;
    }
    if (mCurrentPhoto != null) {
        ImageView imageView = (ImageView) [parent].findViewById(R.id.loaded_iv);
        Picasso.with(App.Instance).load(mCurrentPhoto).into(imageView);
    }
    super.onActivityResult(requestCode, resultCode, data);
    }
    
5
TeeTracker

Wenn Sie nicht möchten, dass ein Ergebnis zurückgegeben wird, versuchen Sie es mit einfachem Code.

Intent i=new Intent(Intent.ACTION_PICK);
            i.setType("image/*");
            startActivity(i);
4
Nizam

wenn jemand den Fehler immer noch erhält, selbst nachdem der folgende Code hinzugefügt wurde 

Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);

dann öffnen Sie möglicherweise die Absicht in einer anderen Klasse (durch Aufrufen), und die App stürzt ab, wenn Sie auf die Schaltfläche klicken.

LÖSUNG FÜR DAS PROBLEM

Setzen Sie den Intent in die Klassendatei, die mit der Layoutdatei der Schaltfläche verbunden ist. Zum Beispiel - activity_main.xml enthält die Schaltfläche und sie ist mit der MainActivity.Java-Datei verbunden. Aufgrund der Fragmentierung definieren Sie jedoch die Absicht in einer anderen Klasse (sagen wir Activity.Java). Dann stürzt Ihre Anwendung ab, es sei denn, Sie legen die Absicht in die Datei MainActivity.Java. Ich habe diesen Fehler erhalten und er wird dadurch behoben.

0
Mohit Garg