Intent filter works on emulator but not on device

二次信任 提交于 2019-12-28 07:05:09

问题


I'm creating a custom intent filter which will open my app when I tap a file with a certain file extension (.myextension in this case.) The intent-filter is below. This currently works perfectly every time I open a .myextension file from my emulator. However, when I try it from my device, it no longer works.

On my device, when I tap a .myextension file in the Files browser app, I see Unable to preview file. instead of automatically opening the app. I've tried opening the file from quite a few locations (Files app, GDrive, Downloads folder, Slack/Gmail, both internal storage and SDCard.) I'm using Android 10 on both my emulator and my device.

<intent-filter android:label="My App">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:scheme="content"
        android:mimeType="*/*"
        android:host="*"
        android:pathPattern=".*\\.myextension" />
</intent-filter>

I've also tried replacing that data tag/adding a second tag with this block but it doesn't seem to help:

<data
    android:scheme="file"
    android:mimeType="*/*"
    android:host="*"
    android:pathPattern=".*\\.myextension" />

Am I missing something obvious? Any help would be greatly appreciated. Thanks!


回答1:


This currently works perfectly every time I open a .myextension file from my emulator.

It will fail much of the time, as it is not really tied to an emulator versus a device.

However, when I try it from my device, it no longer works.

A content Uri is not required to have a file extension, just as an https URL is not required to have a file extension. Much of the time, a content Uri will not have a file extension, and such a Uri will not match your <intent-filter>.

ACTION_VIEW is mostly for files with a widely-recognized MIME type.

I've also tried replacing that data tag/adding a second tag with this block but it doesn't seem to help

file Uri values have been generally banned since Android 7.0.




回答2:


<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:pathPattern=".*\\.myextension" />
     <data android:pathPattern="/*.*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\..*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\..*\\..*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\..*\\..*\\..*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\..*\\..*\\..*\\..*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\..*\\..*\\..*\\..*\\..*\\.myextension" />
     <data android:pathPattern="/*.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.myextension" />
     <data android:host="*" />
</intent-filter>

Though it doesnt work in some of the file managers Better first try in ESExplorer.


来源:https://stackoverflow.com/questions/58291822/intent-filter-works-on-emulator-but-not-on-device

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!