Quero permitir que meu aplicativo angular iônico apareça como uma opção quando os usuários tocarem em arquivos .gpx em um dispositivo Android.
Para fazer isso, editei meu AndroidManifest.xml, mas não consegui fazê-lo funcionar. Agora, meu manifesto está assim:
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="false"
android:fullBackupContent="false"
android:largeHeap="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true">
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation"
android:exported="true"
android:label="@string/title_activity_main"
android:launchMode="singleInstance"
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBarLaunch">
<!-- Primary filter for GPX with correct MIME type -->
<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="content" />
<data android:mimeType="application/gpx+xml" />
</intent-filter>
<!-- Fallback filter for content URI with any MIME type but .gpx extension -->
<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="content" />
<data android:mimeType="*/*" />
<data android:host="*" />
<data android:pathPattern=".*\\.gpx" />
</intent-filter>
<!-- Filter for file:// URIs with .gpx extension -->
<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:mimeType="*/*" />
<data android:pathPattern=".*\\.gpx" />
</intent-filter>
<!-- Additional filters for common MIME types used for GPX files -->
<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="content" />
<data android:mimeType="application/xml" />
</intent-filter>
<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="content" />
<data android:mimeType="text/xml" />
</intent-filter>
</activity>
<provider
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
android:name="androidx.core.content.FileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
</provider>
<receiver android:name="io.capawesome.capacitorjs.plugins.foregroundservice.NotificationActionBroadcastReceiver" />
<service
android:name="io.capawesome.capacitorjs.plugins.foregroundservice.AndroidForegroundService"
android:foregroundServiceType="location"
android:stopWithTask="true" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-feature android:name="android.hardware.location.gps" />
</manifest>
Eu verifiquei no meu dispositivo Android 15. Toquei em um arquivo .gpx em dois gerenciadores de arquivos diferentes, bem como em um arquivo compartilhado via WhatsApp, mas meu aplicativo nunca aparece.
Finalmente consegui fazer funcionar.
Primeiro, como sugerido na resposta anterior, simplifiquei meu filtro de intenção. No entanto, não usei o sugerido, pois parece que curingas não são permitidos nos filtros de intenção do Android 15. Então, usei mimeType, como segue:
Então, o segredo é, como também sugerido na resposta anterior, desinstalar e reinstalar o aplicativo depois de fazer alterações no manifesto, para que tais alterações tenham efeito.
Tente simplificar seus filtros de intenção:
Verifique também se seu aplicativo solicita e tem permissão para ler armazenamento externo em tempo de execução, especialmente se tiver como alvo o SDK 23 ou superior.
E não se esqueça de desinstalá-lo e reinstalá-lo depois de fazer alterações no manifesto.