Wie erstelle ich intent.setType für PDF-, XLSX- und TXT-Dateien für Android?

Lesezeit: 5 Minuten

Ich möchte nur PDF-, XLSX- und TXT-Dateien aus dem Speicher auswählen, aber intent.setType kann nur eine Datei ausführen (z. B. nur TXT-Dateien (oder nur PDF-Dateien). Ist es möglich, alle drei Dateien durch Codierung von intent.setType() abzurufen, und gibt es eine Möglichkeit, dies zu tun?

Hier ist ein Teil meines Codes.

  private void showFileChooser() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("application/pdf");
    intent.addCategory(Intent.CATEGORY_OPENABLE);

    try {
        startActivityForResult(
                Intent.createChooser(intent, "Select txt file"),
                0);
    } catch (android.content.ActivityNotFoundException ex) {
        // Potentially direct the user to the Market with a Dialog

    }
}

  • Sie sollten sich stackoverflow.com/a/33117677/5597641 ansehen

    – Dani Akash

    24. Februar 2017 um 7:19 Uhr

  • Mögliches Duplikat der Vorgehensweise zum Auswählen einiger Dateitypen per Absicht in Android?

    – Dani Akash

    24. Februar 2017 um 7:30 Uhr

Zias Benutzeravatar
Zia

Der Weg von @Fatehali Asamadi ist in Ordnung, aber für eine angemessene Verwendung muss noch etwas hinzugefügt werden. Für Microsoft-Dokumente werden die Erweiterungen (.doc oder .docx), (.ppt oder .pptx) und (.xls oder .xlsx) verwendet. Um diese Erweiterungen zu unterstützen oder zu durchsuchen, müssen Sie weitere mimeTypes hinzufügen.

Verwenden Sie die folgende Methode, um Dokumente zu durchsuchen, in denen REQUEST_CODE_DOC requestCode für die @Override-Methode onActivityResult(final int requestCode, final int resultCode,final Intent data) ist.

private void browseDocuments(){

    String[] mimeTypes =
            {"application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
                    "application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation", // .ppt & .pptx
                    "application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xls & .xlsx
                    "text/plain",
                    "application/pdf",
                    "application/zip"};

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
        if (mimeTypes.length > 0) {
            intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
        }
    } else {
        String mimeTypesStr = "";
        for (String mimeType : mimeTypes) {
            mimeTypesStr += mimeType + "|";
        }
        intent.setType(mimeTypesStr.substring(0,mimeTypesStr.length() - 1));
    }
    startActivityForResult(Intent.createChooser(intent,"ChooseFile"), REQUEST_CODE_DOC);

}

Hier können Sie sich ein klares Konzept verschaffen und die erforderlichen mimeTypes hinzufügen

  • Während ich diesen Code verwende, kann ich keine Dokumente in der App sehen. Kannst du helfen

    – Pawandeep

    16. April 2019 um 17:36 Uhr

  • Meine App unterstützt Kitkat und höher. Daher verwende ich nur die erste Logikbedingung. Irgendwie wird jedoch alles angezeigt und nicht nur das Gewünschte. Ich bezweifle diese Zeile intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");. Wird dadurch nicht alles angezeigt?

    – Yusril Maulidan Raji

    12. September 2019 um 10:05 Uhr


  • Was ist der Zweck dieser Zeile? intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : “/“);.

    – moumenShobakey

    9. Juni 2020 um 9:11 Uhr

  • Ich habe zu viel Zeit damit verbracht, nach dem docx-Mime-Typ „application/vnd.openxmlformats-officedocument.wordprocessingml.document“ zu suchen, den ich für den Parameter „allowedTypes“ von CrossFilePicker.Current.PickFile() benötigte. Danke 🙂

    – chri3g91

    1. Juli 2020 um 9:58

  • Verwenden Sie diesen Code, um den Mimetyp File file = new File(filePath) zu erkennen. String-Erweiterung = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString()); String mimeType = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

    – Benutzer2094075

    3. Februar 2021 um 11:05 Uhr

intent.setType("image/*|application/pdf|audio/*");

Vielleicht ist es das, was Sie wollen.

  • Ist das irgendwo dokumentiert? Als ich versuchte, mehrere Typen auf diese Weise zu kombinieren, wurde kein Dateityp ausgewählt.

    – Arlomedia

    15. Januar 2019 um 20:47 Uhr

  • Ja, es ist klarer, funktioniert aber nicht mit ‘|’ Betreiber, ich habe es versucht und es hat nicht funktioniert.

    – Yogi Arif Widodo

    17. November 2021 um 23:31 Uhr

  • ja, das Gleiche hier. Funktioniert nicht mit „|“

    – Gulab Sagevadiya

    3. Juli 2022 um 14:28

Benutzeravatar von Fatehali Asamadi
Fatehali Asamadi

Sie sollten diesen Link überprüfen http://www.androidsnippets.com/open-any-type-of-file-with-default-intent.html. Lesen Sie auch Mime Type.

So habe ich es für jede Datei oder ausgewählte Mime-Typ-Datei implementiert

String[] mimeTypes =
{"image/*","application/pdf","application/msword","application/vnd.ms-powerpoint","application/vnd.ms-excel","text/plain"};

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    intent.setType(mimeTypes.length == 1 ? mimeTypes[0] : "*/*");
    if (mimeTypes.length > 0) {
       intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
    }
} else {
    String mimeTypesStr = "";
    for (String mimeType : mimeTypes) {
        mimeTypesStr += mimeType + "|";
    }
    intent.setType(mimeTypesStr.substring(0,mimeTypesStr.length() - 1));
}
startActivityForResult(Intent.createChooser(intent,"ChooseFile"), 0);

Benutzeravatar von Daniel Nugent
Daniel Nugent

Offenbar möchten Sie nur sehen, ob diese Absichten gelöst werden können. Dies könnte ein besserer Ansatz sein:

 private void showFileChooser() {

    Intent intentPDF = new Intent(Intent.ACTION_GET_CONTENT);
    intentPDF.setType("application/pdf");
    intentPDF.addCategory(Intent.CATEGORY_OPENABLE);

    Intent intentTxt = new Intent(Intent.ACTION_GET_CONTENT);
    intentTxt.setType("text/plain");
    intentTxt.addCategory(Intent.CATEGORY_OPENABLE);

    Intent intentXls = new Intent(Intent.ACTION_GET_CONTENT);
    intentXls.setType("application/x-excel");
    intentXls.addCategory(Intent.CATEGORY_OPENABLE);

    PackageManager packageManager = getPackageManager();

    List activitiesPDF = packageManager.queryIntentActivities(intentPDF,
    PackageManager.MATCH_DEFAULT_ONLY);
    boolean isIntentSafePDF = activitiesPDF.size() > 0;

    List activitiesTxt = packageManager.queryIntentActivities(intentTxt,
    PackageManager.MATCH_DEFAULT_ONLY);
    boolean isIntentSafeTxt = activitiesTxt.size() > 0;

    List activitiesXls = packageManager.queryIntentActivities(intentXls,
    PackageManager.MATCH_DEFAULT_ONLY);
    boolean isIntentSafeXls = activitiesXls.size() > 0;

    if (!isIntentSafePDF || !isIntentSafeTxt || !isIntentSafeXls){

        // Potentially direct the user to the Market with a Dialog

    }

}

Verweise:

http://developer.android.com/training/basics/intents/sending.html

Wie stelle ich fest, ob Android PDF verarbeiten kann?

Die einfache Lösung ist

   Intent gallery=new Intent();
        gallery.setType("application/*");
        gallery.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(gallery,pick);

Hinweis: pick ist eine int-Variable.

rdonuks Benutzeravatar
rdonuk

Sie können Intent.ACTION_OPEN_DOCUMENT verwenden,

Jedes Dokument wird als content://-URI dargestellt, der von einem unterstützt wird DocumentsProviderder als Stream mit geöffnet werden kann openFileDescriptor(Uri, String)oder abgefragt DocumentsContract.Document Metadaten.

Alle ausgewählten Dokumente werden mit dauerhaften Lese- und Schreibberechtigungen an die aufrufende Anwendung zurückgegeben. Wenn Sie den Zugriff auf die Dokumente über Geräteneustarts hinweg aufrechterhalten möchten, müssen Sie die persistenten Berechtigungen explizit übernehmen takePersistableUriPermission(Uri, int).

Aufrufer müssen die zulässigen Dokument-MIME-Typen angeben setType(String). Um beispielsweise Fotos auszuwählen, verwenden Sie image/*. Wenn mehrere disjunkte MIME-Typen akzeptabel sind, definieren Sie sie in EXTRA_MIME_TYPES Und setType(String) Zu */*.

Weitere Einzelheiten finden Sie unter diesem Link

http://developer.android.com/reference/android/content/Intent.html#ACTION_OPEN_DOCUMENT

Beachten Sie, dass dies nur auf API Level 19+ verfügbar ist.

Vishnu Bennys Benutzeravatar
Vishnu Benny

Hier ist der Kotlin-Weg:

  val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
  val mimeType = arrayOf(
    "application/msword",
    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",  // .doc & .docx
    "application/vnd.ms-powerpoint",
    "application/vnd.openxmlformats-officedocument.presentationml.presentation",  // .ppt & .pptx
    "application/vnd.ms-excel",
    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",  // .xls & .xlsx
    "text/plain",
    "application/pdf",
    "application/zip"
  ).joinToString("|")
  intent.type = mimeType
  intent.addCategory(Intent.CATEGORY_OPENABLE)
  val chooserIntent = Intent
    .createChooser(intent, fragment.getString(R.string.str_attachfile_chooser_message))
  launcher.launch(chooserIntent)

Launcher kann sein als:

val launcher = registerForActivityResult(StartActivityForResult()) { result: ActivityResult ->
    if (result.resultCode == Activity.RESULT_OK) {
        val intent = result.data
        // handle stuff here
    }
}

1451850cookie-checkWie erstelle ich intent.setType für PDF-, XLSX- und TXT-Dateien für Android?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy