Filter maksud Android: mengaitkan aplikasi dengan ekstensi file

92

Saya memiliki jenis / ekstensi file khusus yang ingin saya kaitkan dengan aplikasi saya.

Sejauh yang saya tahu, elemen data dibuat untuk tujuan ini, tetapi saya tidak bisa membuatnya berfungsi. http://developer.android.com/guide/topics/manifest/data-element.html Menurut dokumen, dan banyak posting forum, seharusnya berfungsi seperti ini:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:mimeType="application/pdf" />
</intent-filter>

Yah, itu tidak berhasil. Apa kesalahan yang telah aku perbuat? Saya hanya ingin mendeklarasikan jenis file saya sendiri.

Tamas
sumber
Tambahkan android: label = "@ string / app_name" di filter maksud
Prashant

Jawaban:

116

Anda memerlukan beberapa filter maksud untuk mengatasi situasi berbeda yang ingin Anda tangani.

Contoh 1, tangani permintaan http tanpa mimetypes:

  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.pdf" />
  </intent-filter>

Tangani dengan mimetypes, yang sufiksnya tidak relevan:

  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
    <data android:host="*" />
    <data android:mimeType="application/pdf" />
  </intent-filter>

Tangani maksud dari aplikasi browser file:

  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="file" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.pdf" />
  </intent-filter>
Teh Phyrum
sumber
Saya berpikir bahwa host = "*" dapat ditinggalkan, tetapi mulai menjadi terlalu luas.
Teh Phyrum
@Phyrum Tea: Adakah cara untuk mengaitkan ekstensi file ke aplikasi LAIN menggunakan aplikasi saya? Aplikasi saya menghasilkan file .list yang ingin saya beri tahu android bahwa mereka adalah file teks dan membukanya dengan editor teks (aplikasi saya BUKAN editor teks).
Luis A. Florit
@ LuisA.Florit apakah Anda mencoba memanggil file Anda * .txt? Mungkin berhasil.
Gavriel
ekstensi khusus tidak berfungsi dengan MimeType. Jika saya memberikan mimetype karena / aplikasi saya juga muncul saat saya mengklik notifikasi Gmail.
madan V
1
Tidak bekerja .. Saya muak sekarang mencari dari 2 hari terakhir tidak berhasil. im menggunakan android 9
Ahmad Arslan
49

Solusi lain tidak bekerja dengan andal untuk saya sampai saya menambahkan:

android:mimeType="*/*" 

Sebelum itu berfungsi di beberapa aplikasi, di beberapa tidak ...

solusi lengkap untuk saya:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="file"  android:host="*" android:pathPattern=".*\\.EXT" android:mimeType="*/*"  />
</intent-filter>
Emmanuel Touzery
sumber
1
Wow! ini membantu saya. Sepertinya dokumentasi android salah. Semua (skema, host, jalur [Pola], mimeType) harus dinyatakan berfungsi
Gavriel
Anda harus memiliki kedua aturan dengan mimeTypedan satu tanpa jika Anda ingin menjadi lengkap. Lihat developer.android.com/guide/components/…
Andrew Sun
1
Bagaimana jika Anda ingin membuka aplikasi file Anda dari Gmail?
IgorGanapolsky
31

Jawaban yang diberikan oleh Phyrum Tea dan yuku sudah sangat informatif.

Saya ingin menambahkannya dimulai dengan Android 7.0 Nougat ada perubahan pada cara penanganan file sharing antar aplikasi:

Dari Perubahan Android 7.0 resmi :

Untuk aplikasi yang menargetkan Android 7.0, framework Android memberlakukan kebijakan StrictMode API yang melarang pemaparan URI file: // di luar aplikasi Anda. Jika maksud yang berisi URI file meninggalkan aplikasi Anda, aplikasi akan gagal dengan pengecualian FileUriExposedException.

Untuk berbagi file antar aplikasi, Anda harus mengirim URI content: // dan memberikan izin akses sementara pada URI. Cara termudah untuk memberikan izin ini adalah dengan menggunakan kelas FileProvider. Untuk informasi selengkapnya tentang izin dan berbagi file, lihat Berbagi File.

Jika Anda memiliki file kustom Anda sendiri yang diakhiri tanpa spesifik mime-type(atau saya kira bahkan dengan satu) Anda mungkin harus menambahkan schemenilai kedua ke Anda intent-filteruntuk membuatnya bekerja FileProvidersjuga.

Contoh:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:scheme="file" />
    <data android:scheme="content" />
    <data android:mimeType="*/*" />
    <!--
        Work around Android's ugly primitive PatternMatcher
        implementation that can't cope with finding a . early in
        the path unless it's explicitly matched.
    -->
    <data android:host="*" />
    <data android:pathPattern=".*\\.sfx" />
    <data android:pathPattern=".*\\..*\\.sfx" />
    <data android:pathPattern=".*\\..*\\..*\\.sfx" />
    <data android:pathPattern=".*\\..*\\..*\\..*\\.sfx" />
    <!-- keep going if you need more -->

</intent-filter>

Yang penting di sini adalah penambahan

<data android:scheme="content" />

ke filter.

Saya mengalami kesulitan mencari tahu tentang perubahan kecil ini yang membuat aktivitas saya tidak terbuka di perangkat Android 7.0 sementara semuanya baik-baik saja di versi yang lebih lama. Saya harap ini membantu seseorang.

Markus Ressel
sumber
Tanpa tip dan informasi tambahan ini, saya tidak dapat membuat aplikasi saya mendaftar dengan penjelajah file. Ini penting dan harus diberi suara positif
u2tall
Anda menghemat satu hari! Tnx besar. Ini harus menjadi jawaban yang diterima!
Andris
⚠️ Jika Anda mencoba mendapatkan file yang disediakan melalui skema konten, seperti File(uri.path), itu akan macet karena No such file or directory- harus menangani skenario itu secara berbeda saat memperbarui untuk mendukung Nougat +!
Jordan H
19

Temuan saya:

Anda memerlukan beberapa filter untuk menangani berbagai cara mengambil file. yaitu, dengan lampiran gmail, dengan file explorer, dengan HTTP, dengan FTP ... Mereka semua mengirimkan maksud yang sangat berbeda.

Dan Anda perlu memfilter maksud yang memicu aktivitas Anda di kode aktivitas.

Untuk contoh di bawah ini, saya membuat file palsu dengan tipe new.mrz. Dan saya mengambilnya dari lampiran gmail dan file explorer.

Kode aktivitas ditambahkan di onCreate ():

        Intent intent = getIntent();
        String action = intent.getAction();

        if (action.compareTo(Intent.ACTION_VIEW) == 0) {
            String scheme = intent.getScheme();
            ContentResolver resolver = getContentResolver();

            if (scheme.compareTo(ContentResolver.SCHEME_CONTENT) == 0) {
                Uri uri = intent.getData();
                String name = getContentName(resolver, uri);

                Log.v("tag" , "Content intent detected: " + action + " : " + intent.getDataString() + " : " + intent.getType() + " : " + name);
                InputStream input = resolver.openInputStream(uri);
                String importfilepath = "/sdcard/My Documents/" + name; 
                InputStreamToFile(input, importfilepath);
            }
            else if (scheme.compareTo(ContentResolver.SCHEME_FILE) == 0) {
                Uri uri = intent.getData();
                String name = uri.getLastPathSegment();

                Log.v("tag" , "File intent detected: " + action + " : " + intent.getDataString() + " : " + intent.getType() + " : " + name);
                InputStream input = resolver.openInputStream(uri);
                String importfilepath = "/sdcard/My Documents/" + name; 
                InputStreamToFile(input, importfilepath);
            }
            else if (scheme.compareTo("http") == 0) {
                // TODO Import from HTTP!
            }
            else if (scheme.compareTo("ftp") == 0) {
                // TODO Import from FTP!
            }
        }

Filter lampiran Gmail:

        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="content" />
            <data android:mimeType="application/octet-stream" />
        </intent-filter>
  • LOG: Maksud konten terdeteksi: android.intent.action.VIEW: content: //gmail-ls/[email protected]/messages/2950/attachments/0.1/BEST/false: application / octet-stream: baru. mrz

Filter penjelajah file:

        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file" />
            <data android:pathPattern=".*\\.mrz" />
        </intent-filter>
  • LOG: Maksud file terdeteksi: android.intent.action.VIEW: file: ///storage/sdcard0/My%20Documents/new.mrz: null: new.mrz

Filter HTTP:

        <intent-filter android:label="@string/rbook_viewer">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
            <data android:pathPattern=".*\\.mrz" />
        </intent-filter>

Fungsi pribadi yang digunakan di atas:

private String getContentName(ContentResolver resolver, Uri uri){
    Cursor cursor = resolver.query(uri, null, null, null, null);
    cursor.moveToFirst();
    int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
    if (nameIndex >= 0) {
        return cursor.getString(nameIndex);
    } else {
        return null;
    }
}

private void InputStreamToFile(InputStream in, String file) {
    try {
        OutputStream out = new FileOutputStream(new File(file));

        int size = 0;
        byte[] buffer = new byte[1024];

        while ((size = in.read(buffer)) != -1) {
            out.write(buffer, 0, size);
        }

        out.close();
    }
    catch (Exception e) {
        Log.e("MainActivity", "InputStreamToFile exception: " + e.getMessage());
    }
}
LFOR
sumber
Apakah aktivitas harus peluncur atau tipe utama? Karena saya mencoba filter lampiran gmail dan tidak berhasil.
Amit
15

Itu pathPattern

<data android:pathPattern=".*\\.pdf" />

tidak berfungsi jika jalur file berisi satu atau lebih titik sebelum ".pdf".

Ini akan berhasil:

<data android:pathPattern=".*\\.pdf" />
<data android:pathPattern=".*\\..*\\.pdf" />
<data android:pathPattern=".*\\..*\\..*\\.pdf" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.pdf" />

Tambahkan lebih banyak jika Anda ingin mendukung lebih banyak titik.

Randy Sugianto 'Yuku'
sumber
1
Sampai sekarang ini adalah satu-satunya pilihan untuk masuk ke sub folder
LokiDroid
Saya menggunakan kode yang sama tetapi IDE memberi saya peringatan, lihat pertanyaan ini stackoverflow.com/questions/35833776/…
AndreaF
5

Saya sudah mencoba membuat ini berfungsi selama berabad-abad dan pada dasarnya telah mencoba semua solusi yang disarankan dan masih tidak bisa membuat Android mengenali ekstensi file tertentu. Saya memiliki filter-maksud dengan "*/*"mimetype yang merupakan satu-satunya hal yang tampaknya berfungsi dan file-browser sekarang mencantumkan aplikasi saya sebagai opsi untuk membuka file, namun aplikasi saya sekarang ditampilkan sebagai opsi untuk membuka APAPUN file meskipun Saya telah menentukan ekstensi file tertentu menggunakan tag pathPattern. Sejauh ini bahkan ketika saya mencoba untuk melihat / mengedit kontak di daftar kontak saya Android bertanya apakah saya ingin menggunakan aplikasi saya untuk melihat kontak, dan itu hanya salah satu dari banyak situasi di mana hal ini terjadi, SANGAT SANGAT mengganggu.

Akhirnya saya menemukan posting grup google ini dengan pertanyaan serupa yang dijawab oleh insinyur kerangka Android yang sebenarnya. Dia menjelaskan bahwa Android sama sekali tidak tahu apa-apa tentang ekstensi file, hanya jenis MIME ( https://groups.google.com/forum/#!topic/android-developers/a7qsSl3vQq0 ).

Jadi dari apa yang saya lihat, coba dan baca, Android tidak bisa membedakan antara ekstensi file dan tag pathPattern pada dasarnya adalah pemborosan waktu dan energi yang sangat besar. Jika Anda cukup beruntung karena hanya membutuhkan file dengan jenis mime tertentu (misalnya teks, video, atau audio), Anda dapat menggunakan filter maksud dengan jenis mime. Jika Anda memerlukan ekstensi file tertentu atau jenis mime yang tidak dikenal oleh Android, Anda kurang beruntung.

Jika saya salah tentang semua ini, tolong beri tahu saya, sejauh ini saya telah membaca setiap posting dan mencoba setiap solusi yang diusulkan yang dapat saya temukan tetapi tidak ada yang berhasil.

Saya dapat menulis satu atau dua halaman lagi tentang seberapa umum hal-hal semacam ini tampaknya ada di Android dan betapa mengacaukan pengalaman pengembang, tetapi saya akan menyelamatkan Anda dari kata-kata kasar saya;). Semoga saya menyelamatkan seseorang dari masalah.

PeeGee85
sumber
5

Markus Ressel benar. Android 7.0 Nougat tidak lagi mengizinkan berbagi file antar aplikasi menggunakan URI file. URI konten harus digunakan. Namun, URI materi tidak mengizinkan jalur file untuk dibagikan, hanya jenis mime. Jadi, Anda tidak dapat menggunakan URI konten untuk mengaitkan aplikasi Anda dengan ekstensi file Anda sendiri.

Drobpox memiliki perilaku yang menarik di Android 7.0. Ketika bertemu dengan ekstensi file yang tidak dikenal, ia tampak membentuk maksud URI file tetapi bukannya meluncurkan maksud itu memanggil sistem operasi untuk mencari tahu aplikasi mana yang bisa menerima maksud tersebut. Jika hanya ada satu aplikasi yang dapat menerima URI file tersebut, maka URI konten eksplisit akan dikirim langsung ke aplikasi tersebut. Jadi untuk bekerja dengan Dropbox Anda tidak perlu mengubah filter maksud di aplikasi Anda. Ini tidak memerlukan filter maksud URI materi. Pastikan saja aplikasi tersebut dapat menerima URI konten dan aplikasi Anda dengan ekstensi file Anda sendiri akan bekerja dengan Dropbox seperti sebelum Android 7.0.

Berikut adalah contoh kode pemuatan file saya yang dimodifikasi untuk menerima URI konten:

Uri uri = getIntent().getData();
if (uri != null) {
    File myFile = null;
    String scheme = uri.getScheme();
    if (scheme.equals("file")) {
        String fileName = uri.getEncodedPath();
        myFile = new File(filename);
    }
    else if (!scheme.equals("content")) {
        //error
        return;
    }
    try {
        InputStream inStream;
        if (myFile != null) inStream = new FileInputStream(myFile);
        else inStream = getContentResolver().openInputStream(uri);
        InputStreamReader rdr = new InputStreamReader(inStream);
        ...
    }
}
Peter Newman
sumber
2

Anda mencoba ini, itu akan membantu Anda. Alih-alih pdf Anda juga dapat menggunakan ekstensi lain. Pertama, Anda harus menambahkan izin baca penyimpanan eksternal di file androidmanifest.xml .

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Kemudian di file androidmanifest di tag Activity, Anda menambahkan intent-filter seperti yang ditunjukkan di bawah ini.

            <action android:name="android.intent.action.SEND" />

            <action android:name="android.intent.action.VIEW" />

             <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType= "application/pdf" />

            <data android:host="*" />

        </intent-filter>

Terakhir di kode Anda, Anda mendapatkan jalur file pdf seperti yang ditunjukkan di bawah ini:

Intent intent=getIntent();

if(intent!=null) {          

        String action=intent.getAction();

        String type=intent.getType();

        if(Intent.ACTION_VIEW.equals(action) && type.endsWith("pdf")) {

            // Get the file from the intent object

            Uri file_uri=intent.getData();

            if(file_uri!=null)

                filepath=file_uri.getPath();

            else

                filepath="No file";

        }

        else if(Intent.ACTION_SEND.equals(action) && type.endsWith("pdf")){

            Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);

            filepath = uri.getPath();

        }
Arjun Othayoth
sumber
Untuk Intent.ACTION_VIEW ini, tidak dapat mengambil jalur file itu menyebabkan kesalahan: java.io.FileNotFoundException: Izin ditolak. Ini hanya dari beberapa aplikasi tertentu, tidak setiap saat. ada solusi?
Hardik Joshi
@HardikJoshi Aplikasi mungkin tidak menyetel izin GRANT_READ_URI_PERMISSION.
Mira_Cole
1

Coba tambahkan

<action android:name="android.intent.action.VIEW"/>
magaio
sumber
Sekarang yang berfungsi dengan jenis file yang diatur pabrik seperti application / pdf, bagaimana cara mendeklarasikan jenis file saya sendiri? Dan ketika saya mengatakan jenis file, maksud saya mimeType;)
Tamas
Jenis file apa yang ingin Anda tangkap dari mimetype ini? Juga, apakah file ini dibuka dari browser atau pengelola file atau dikirim dari aplikasi lain yang Anda buat?
magaio
bisa dari browser, klien email, manajer file, atau di mana saja .. Atau aplikasi saya sendiri ofc :) ekstensi file dibuat khusus, ditentukan oleh klien.
Tamas
Nah, saya masih terjebak ... ada yang bisa membantu?
Tamas
@Tamas apakah Anda semua mendapatkan ini diurutkan. Saya terjebak dalam hal ini!
StuStirling
1

Untuk lampiran Gmail, Anda dapat menggunakan:

<intent-filter android:label="@string/app_name">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:scheme="content" />
  <data android:mimeType="application/pdf" /> <!-- .pdf -->
  <data android:mimeType="application/msword" /> <!-- .doc / .dot -->
  <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" /> <!-- .docx -->
  <data android:mimeType="application/vnd.ms-excel" />  <!-- .xls / .xlt / .xla -->
  <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />  <!-- .xlsx -->
  <data android:mimeType="application/vnd.ms-powerpoint" />  <!-- .ppt / .pps / .pot / .ppa -->
  <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" /> <!-- .pptx -->
  <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" /> <!-- .ppsx -->
  <data android:mimeType="application/zip" /> <!-- .zip -->
  <data android:mimeType="image/jpeg" /> <!-- .jpeg -->
  <data android:mimeType="image/png" /> <!-- .png -->
  <data android:mimeType="image/gif" /> <!-- .gif -->
  <data android:mimeType="text/plain" /> <!-- .txt / .text / .log / .c / .c++ / ... -->

Tambahkan jenis pantomim sebanyak yang Anda butuhkan. Saya hanya membutuhkan itu untuk proyek saya.

Hrk
sumber
1
         <!--
            Works for Files, Drive and DropBox
        -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file" />
            <data android:mimeType="*/*" />
            <data android:host="*" />
            <data android:pathPattern=".*\\.teamz" />
        </intent-filter>

        <!--
            Works for Gmail
        -->
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:host="gmail-ls" android:scheme="content" android:mimeType="application/octet-stream"/>
        </intent-filter>

Perhatikan bahwa ini akan membuat aplikasi Anda membuka semua lampiran file gmail, tidak ada cara untuk mengatasinya

Ofir Bitton
sumber
Ini akan menangani setiap file yang diemail ke pengguna, tidak hanya .teamz
IgorGanapolsky
1

Mereka yang mengalami masalah dengan aplikasi File Manager \ Explorer lainnya, seperti yang dijawab @yuku dan @ phyrum-tea

Ini berfungsi dengan aplikasi pengelola file default LG

     <intent-filter android:label="@string/app_name_decrypt">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file" />
            <data android:pathPattern=".*\\.lock" />
            <data android:pathPattern=".*\\..*\\.lock" />
            <data android:pathPattern=".*\\..*\\..*\\.lock" />
        </intent-filter>

tetapi tidak dapat bekerja dengan ES File Explorer dan Manajer File lainnya jadi saya menambahkan

 android:mimeType="*/*"

kemudian berfungsi dengan ES Explorer tetapi pengelola file LG tidak dapat mendeteksi jenis file jadi solusi saya adalah

     <intent-filter android:label="@string/app_name_decrypt">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file" />
            <data android:pathPattern=".*\\.lock" />
            <data android:pathPattern=".*\\..*\\.lock" />
            <data android:pathPattern=".*\\..*\\..*\\.lock" />
        </intent-filter>
        <intent-filter android:label="@string/app_name_decrypt">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="file"/>
            <data android:scheme="content" />
            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\\.lock" />
            <data android:pathPattern=".*\\..*\\.lock" />
            <data android:pathPattern=".*\\..*\\..*\\.lock" />
        </intent-filter>
Sumit
sumber
1

URI materi ftw, dan dengan filter maksud dalam manifes ... jika file Anda memiliki ekstensi khusus .xyz, tambahkan jenis mime yang cocok:

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <data
                android:host="*"
                android:mimeType="application/xyz"
                android:scheme="content" />
        </intent-filter>

Beberapa aplikasi seperti email tampaknya mengubah ekstensi menjadi jenis pantomim. Sekarang saya dapat mengklik lampiran di email dan membukanya di aplikasi saya.

Sofi Software LLC
sumber
1

Baca membuka file di kotlin:

private fun checkFileOpening(intent: Intent) {
    if (intent.action == Intent.ACTION_VIEW && (intent.scheme == ContentResolver.SCHEME_FILE
                    || intent.scheme == ContentResolver.SCHEME_CONTENT)) {

        val text = intent.data?.let {
            contentResolver.openInputStream(it)?.bufferedReader()?.use(BufferedReader::readText) 
        }
    }
}
brucemax.dll
sumber
-1

Letakkan filter maksud ini di dalam tag aktivitas dalam manifes yang ingin Anda buka dengan menyentuh file:

<intent-filter android:priority="999">
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.OPENABLE" />

    <data android:host="*" />
    <data android:mimeType="application/octet-stream" />
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.yourextension" />
    <data android:pathPattern=".*\\..*\\..*\\..*\\.yourextension" />
    <data android:pathPattern=".*\\..*\\..*\\.yourextension" />
    <data android:pathPattern=".*\\..*\\.yourextension" />
    <data android:pathPattern=".*\\.yourextension" />
    <data android:scheme="content" />
</intent-filter>
Ráfagan
sumber
-1

// Saya sudah mencoba kode ini. Dan itu bekerja dengan baik. Anda dapat menggunakan kode ini untuk menerima file pdf.

<intent-filter>
   <action android:name="android.intent.action.SEND" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="application/pdf" />
   <data android:pathPattern=".*\\.pdf" />
   <data android:pathPattern=".*\\..*\\.pdf" />
   <data android:pathPattern=".*\\..*\\..*\\.pdf" />
   <data android:pathPattern=".*\\..*\\..*\\..*\\.pdf" />
</intent-filter>
Arslan Tahir
sumber