Android amaç filtresi: uygulamayı dosya uzantısıyla ilişkilendirin


93

Uygulamamı ilişkilendirmek istediğim özel bir dosya türüne / uzantısına sahibim.

Bildiğim kadarıyla veri unsuru bu amaç için yapılmış ama onu çalıştıramıyorum. http://developer.android.com/guide/topics/manifest/data-element.html Dokümanlara ve birçok forum gönderisine göre şu şekilde çalışmalıdır:

<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>

Peki, çalışmıyor. Neyi yanlış yaptım? Sadece kendi dosya türümü bildirmek istiyorum.


Amaç filtresine android: label = "@ string / app_name" ekle
Prashant

Yanıtlar:


117

Başa çıkmak istediğiniz farklı durumu ele almak için birden fazla amaç filtresine ihtiyacınız var.

Örnek 1, http isteklerini mime türleri olmadan ele alın:

  <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>

Son ekin alakasız olduğu durumlarda mime türlerini kullanın:

  <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>

Bir dosya tarayıcı uygulamasından niyeti işleyin:

  <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>

Host = "*" nin atlanabileceğini düşündüm, ancak çok geniş olmaya başladı.
Phyrum Tea

1
@Phyrum Tea: Uygulamamı kullanarak bir dosya uzantısını DİĞER uygulamayla ilişkilendirmenin bir yolu var mı? Uygulamam, android'e bunların metin dosyaları olduğunu söylemek ve bunları bir metin düzenleyiciyle açmak istediğim .list dosyaları oluşturuyor (uygulamam bir metin düzenleyici DEĞİLDİR).
Luis A. Florit

@ LuisA.Florit dosyalarınızı * .txt olarak adlandırmayı denediniz mi? İşe yarayabilir.
Gavriel

özel uzantı MimeType ile çalışmıyor. Eğer mimetype verirsem / uygulamam Gmail bildirimine tıkladığımda da görünüyor.
madan V

1
Çalışmıyor .. Bıktım artık son 2 günden itibaren arama çalışmadı. android 9 kullanıyorum
Ahmad Arslan

49

Diğer çözümler, şunu ekleyene kadar benim için güvenilir şekilde çalışmadı:

android:mimeType="*/*" 

Bundan önce bazı uygulamalarda çalıştı, bazılarında değil ...

benim için eksiksiz çözüm:

<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>

1
Vaov! bu bana yardımcı oldu. Görünüşe göre android belgeleri yanlış. Tüm (şema, ana bilgisayar, yol [Desen], mimeType) çalışacak şekilde bildirilmelidir
Gavriel

Tam olmak istiyorsanız , hem ile hem de olmayan bir kuralınız olmalıdır mimeType. Developer.android.com/guide/components/… sayfasına
Andrew Sun

1
Ya dosya uygulamanızı Gmail'den açmak isterseniz?
IgorGanapolsky

32

Phyrum Tea ve yuku'nun verdiği cevaplar zaten çok bilgilendirici.

Bunu Android 7.0 Nougat'tan başlayarak eklemek istiyorum uygulamalar arasında dosya paylaşımının işlenme biçiminde bir değişiklik :

Resmi Android 7.0 Değişikliklerinden :

Android 7.0'ı hedefleyen uygulamalar için Android çerçevesi, file: // URI'ların uygulamanızın dışında gösterilmesini yasaklayan StrictMode API politikasını uygular. Bir dosya URI'si içeren bir amaç uygulamanızdan ayrılırsa, uygulama bir FileUriExposedException istisnasıyla başarısız olur.

Dosyaları uygulamalar arasında paylaşmak için, bir içerik: // URI göndermeli ve URI üzerinde geçici bir erişim izni vermelisiniz. Bu izni vermenin en kolay yolu FileProvider sınıfını kullanmaktır. İzinler ve dosya paylaşımı hakkında daha fazla bilgi için bkz. Dosyaları Paylaşma.

Belirli bir dosya olmadan biten kendi özel dosyanız varsa mime-type(veya biriyle bile olsa) , onunla da çalışması için ikinci bir schemedeğer eklemeniz gerekebilir .intent-filterFileProviders

Misal:

<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>

Burada önemli olan şey eklenmesi

<data android:scheme="content" />

filtreye.

Eski sürümlerde her şey yolundayken etkinliğimin Android 7.0 cihazlarda açılmasını engelleyen bu küçük değişikliği öğrenmekte zorlandım. Umarım birine yardımcı olur.


Bu ipucu ve ekstra bilgi olmadan uygulamamın dosya gezginlerine kaydolmasını sağlayamadım. Bu çok önemli ve olumlu oy verilmeli
2019

Bir gün kurtardın! Büyük tnx. Bu cevap kabul edilmelidir!
Andris

⚠️ İçerik şeması aracılığıyla sağlanan dosyayı almaya çalışırsanız, örneğin File(uri.path), No such file or directory- Nougat + 'ı desteklemek için güncelleme yaparken bu senaryoyu farklı şekilde ele almak zorunda kalacaktır!
Jordan H

20

Bulgularım:

Bir dosyayı almanın farklı yollarıyla başa çıkmak için birkaç filtreye ihtiyacınız vardır. gmail eki ile, dosya gezgini ile, HTTP ile, FTP ile ... Hepsi çok farklı amaçlar gönderiyor.

Aktivitenizi tetikleyen amacı aktivite kodunuzda filtrelemeniz gerekir.

Aşağıdaki örnek için, sahte bir dosya türü new.mrz oluşturdum. Ve onu gmail ekinden ve dosya gezgininden aldım.

OnCreate () 'e eklenen etkinlik kodu:

        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!
            }
        }

Gmail ek filtresi:

        <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>
  • GÜNLÜK: Algılanan içerik amacı: android.intent.action.VIEW: içerik: //gmail-ls/l.foul@gmail.com/messages/2950/attachments/0.1/BEST/false: application / octet-stream: new. mrz

Dosya gezgini filtresi:

        <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>
  • GÜNLÜK: Algılanan dosya amacı: android.intent.action.VIEW: file: ///storage/sdcard0/My%20Documents/new.mrz: null: new.mrz

HTTP filtresi:

        <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>

Yukarıda kullanılan özel işlevler:

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());
    }
}

Aktivitenin başlatıcı mı yoksa ana tip mi olması gerekiyor? Çünkü gmail ek filtresini denedim ve çalışmıyor.
Amit

15

pathPattern

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

dosya yolu ".pdf" ten önce bir veya daha fazla nokta içeriyorsa çalışmaz.

Bu çalışacak:

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

Daha fazla noktayı desteklemek istiyorsanız daha fazlasını ekleyin.


1
Şu an itibariyle alt klasörlere girmek için tek seçenek bu
LokiDroid

Aynı kodu kullanıyorum ama IDE bana bir uyarı veriyor, bu soruya bakın stackoverflow.com/questions/35833776/…
AndreaF

5

Bunu uzun zamandır çalıştırmaya çalışıyorum ve temel olarak önerilen tüm çözümleri denedim ve yine de Android'in belirli dosya uzantılarını tanımasını sağlayamıyorum. "*/*"Çalışıyor gibi görünen tek şey olan bir mime türüne sahip bir amaç filtrem var ve dosya tarayıcıları artık uygulamamı dosyaları açmak için bir seçenek olarak listeliyor, ancak uygulamam artık HERHANGİ bir dosya türünü açmak için bir seçenek olarak gösteriliyor PathPattern etiketini kullanarak belirli dosya uzantıları belirledim. Bu o kadar ileri gidiyor ki, kişi listemdeki bir kişiyi görüntülemeye / düzenlemeye çalıştığımda bile Android, kişiyi görüntülemek için uygulamamı kullanmak isteyip istemediğimi soruyor ve bu, bunun meydana geldiği birçok durumdan sadece biri, ÇOK ÇOK can sıkıcı.

Sonunda, gerçek bir Android çerçeve mühendisinin yanıtladığı benzer bir soruyla bu Google grupları gönderisini buldum. Android'in dosya uzantıları hakkında hiçbir şey bilmediğini, yalnızca MIME türlerini ( https://groups.google.com/forum/#!topic/android-developers/a7qsSl3vQq0 ) bilmediğini açıklıyor .

Gördüğüm, denediğim ve okuduğum kadarıyla, Android dosya uzantılarını ayırt edemiyor ve pathPattern etiketi temelde devasa bir zaman ve enerji kaybı. Yalnızca belirli bir mime türündeki dosyalara (örneğin metin, video veya ses) ihtiyaç duyacak kadar şanslıysanız, mime türünde bir amaç filtresi kullanabilirsiniz. Belirli bir dosya uzantısına veya Android tarafından bilinmeyen bir mime türüne ihtiyacınız varsa, o zaman şansınız kalmaz.

Bunlardan herhangi biri hakkında yanılıyorsam lütfen bana söyleyin, şimdiye kadar her yazıyı okudum ve bulabildiğim her çözümü denedim ama hiçbiri işe yaramadı.

Bu tür şeylerin Android'de ne kadar yaygın göründüğü ve geliştirici deneyiminin ne kadar berbat olduğu hakkında bir veya iki sayfa daha yazabilirim, ancak sizi kızgın sözlerimden kurtaracağım;). Umarım birini biraz dertten kurtardım.


5

Markus Ressel haklı. Android 7.0 Nougat, dosya URI'si kullanan uygulamalar arasında dosya paylaşımına artık izin vermemektedir. Bir içerik URI'sı kullanılmalıdır. Ancak, bir içerik URI'si bir dosya yolunun paylaşılmasına izin vermez, sadece bir mime türüne izin verir. Dolayısıyla, uygulamanızı kendi dosya uzantınızla ilişkilendirmek için bir içerik URI'si kullanamazsınız.

Drobpox'un Android 7.0'da ilginç bir davranışı var. Bilinmeyen bir dosya uzantısıyla karşılaştığında, bir dosya URI amacı oluşturuyor gibi görünür, ancak amacı başlatmak yerine, hangi uygulamaların amacı kabul edebileceğini bulmak için işletim sistemini çağırır. Bu dosya URI'sini kabul edebilen yalnızca bir uygulama varsa, o uygulamaya doğrudan bir açık içerik URI'si gönderir. Dolayısıyla Dropbox ile çalışmak için uygulamanızdaki amaç filtrelerini değiştirmenize gerek yoktur. İçerik URI'si amaç filtresi gerektirmez. Uygulamanın bir içerik URI'si alabildiğinden ve kendi dosya uzantınıza sahip uygulamanızın, Android 7.0'dan önce olduğu gibi Dropbox ile çalışacağından emin olun.

İçerik URI'sini kabul etmek için değiştirilen dosya yükleme kodumun bir örneğini burada bulabilirsiniz:

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);
        ...
    }
}

2

Bunu denerseniz size yardımcı olacaktır. Pdf yerine başka uzantıları da kullanabilirsiniz. Öncelikle androidmanifest.xml dosyasına harici depolama izni eklemeniz gerekir .

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

Ardından , Etkinlik etiketindeki androidmanifest dosyasında, aşağıda gösterildiği gibi bir amaç filtresi eklersiniz.

            <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>

Son olarak kodunuzda, aşağıda gösterildiği gibi pdf dosyasının yolunu alırsınız:

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();

        }

Bu Intent.ACTION_VIEW için, dosya yolunu alamamak şu hataya neden olur: java.io.FileNotFoundException: İzin reddedildi. Her seferinde değil, yalnızca bazı özel uygulamalardan. herhangi bir çözüm?
Hardik Joshi

@HardikJoshi Uygulamalar GRANT_READ_URI_PERMISSION izinlerini ayarlamıyor olabilir.
Mira_Cole

1

Eklemeyi dene

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

Artık uygulama / pdf gibi fabrika ayarlı dosya türleriyle çalışıyor, kendi dosya türümü nasıl bildirebilirim? Ve dosya türü dediğimde, mimeType demek istiyorum;)
Tamas

Bu mime türünün ne tür bir dosya yakalamasını istiyorsunuz? Ayrıca, bu dosya tarayıcıdan veya dosya yöneticisinden mi açıldı yoksa yaptığınız başka bir uygulamadan mı gönderildi?
magaio

tarayıcıdan, posta istemcisinden, dosya yöneticisinden veya herhangi bir yerden olabilir .. Veya benim uygulamam ofc :) dosya uzantısı özeldir, istemci tarafından belirlenir.
Tamas

Hala sıkıştım ... Biri yardım edebilir mi lütfen?
Tamas

@Tamas, bunu sıraladınız mı? Ben buna takıldım!
StuStirling

1

Gmail eki için şunları kullanabilirsiniz:

<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++ / ... -->

Gerektiği kadar çok mime türü ekleyin. Bunlara sadece projem için ihtiyacım var.


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>

Bunun uygulamanızı tüm gmail dosya eklerini açacağına dikkat edin, bu konuda çalışmanın bir yolu yoktur.


Bu, yalnızca .teamz
IgorGanapolsky

1

@Yuku ve @ phyrum-tea gibi diğer Dosya Yöneticisi \ Explorer uygulamalarıyla sorun yaşayanlar

Bu, LG varsayılan dosya yöneticisi uygulamasıyla çalışır

     <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>

ancak ES Dosya Gezgini ve diğer Dosya Yöneticileri ile çalışamadım, bu yüzden ekledim

 android:mimeType="*/*"

daha sonra ES Explorer ile çalışır, ancak LG dosya yöneticisi dosya türünü algılayamadı, bu nedenle çözümüm

     <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>

1

İçerik URI ftw ve bildirimdeki amaç filtresiyle ... dosyalarınız özel bir .xyz uzantısına sahipse, eşleşen bir mime türü ekleyin:

        <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>

E-posta gibi bazı uygulamalar, uzantıyı bir mime türüne dönüştürüyor gibi görünüyor. Artık e-postadaki eke tıklayıp uygulamamda açtırabilirim.


1

Kotlin'deki açılış dosyasını okuyun:

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) 
        }
    }
}

-1

Dosyaya dokunarak açmak istediğiniz manifestteki etkinlik etiketinin içine bu amaç filtresini yerleştirin:

<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>

-1

// Bu kodu denedim. Ve iyi çalışıyor. Bu kodu pdf dosyasını kabul etmek için kullanabilirsiniz.

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.