【发布时间】:2017-08-25 10:57:46
【问题描述】:
我正在尝试将我的应用设置为默认音乐播放器,但我发现了两个问题。
第一个是关于清单声明:根据 Google 音乐应用清单 (manifest),我选择的活动上的代码是:
<activity
android:name=".Dashboard"
android:theme="@style/NoActionBar"
android:screenOrientation="portrait"
android:launchMode="singleTask">
<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:host="media"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="application/ogg"/>
<data android:mimeType="application/x-ogg"/>
<data android:mimeType="application/itunes"/>
</intent-filter>
</activity>
但如果我尝试打开音乐文件,我的应用程序不在兼容应用程序列表中(为什么?)。所以我尝试以这种方式指定文件扩展名:
<activity
android:name=".Dashboard"
android:theme="@style/NoActionBar"
android:screenOrientation="portrait"
android:launchMode="singleTask">
<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:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.mp3" />
<data android:host="*" />
</intent-filter>
</activity>
这段代码对我有用,但我认为不是最好的方法。 还有另一个带有一些重要内容过滤器的活动,我不知道这是否是问题所在。这是第一个活动(所以启动一个,登录活动)。他的主要宣言是
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:theme="@style/NoActionBar"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.MUSIC_PLAYER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.APP_MUSIC" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
此时我可以在启动 .mp3 文件时将我的应用设置为默认应用,但这里第二个问题:
当我的应用程序在后台时,我无法拦截来自Intent 的Uri。我试图将getIntent().getData() 放在OnCreate, OnResume and OnStart 上,但是当点击音乐文件并且我的应用程序处于后台时,数据始终为null。当我的应用程序不在后台时,它不为空。 我要解决什么问题?
【问题讨论】:
-
“但它不适合我”——请解释一下“不适合我”是什么意思。 “当我的应用程序在后台时,我无法从 Intent 拦截 Uri”——您是否覆盖了
onNewIntent()? -
@CommonsWare 带有“但不适用于我”我的意思是当我尝试从文件资源管理器打开音乐文件时,我的应用程序不在兼容应用程序列表中(我使用 es 文件探索)。不,我不覆盖 onNewIntent,我有什么要做的吗?
-
“我不覆盖 onNewIntent,我有事吗?” -- 如果您有一个正在重用的活动实例,则将第二个和后续的
Intents交给onNewIntent(),而不是onCreate()。 “我的意思是当我尝试从文件资源管理器打开音乐文件时,我的应用程序不在兼容应用程序列表中” - 大概,您的文件资源管理器使用Uri值和file方案,至少在安卓 6.0 及更早版本。 Android 7.0+ 对使用该方案有限制。 -
@CommonsWare 好的,现在使用 onNewIntent() 我可以拦截第二个后续 Intent。但是我还没有解决第二个问题。
标签: android android-intent android-manifest android-mediaplayer intentfilter