android - 通过文件打开启动应用程序
问题描述
我创建了一个音乐播放器,现在我想实现一个功能,如果我单击一个文件(例如在 Total Commander 中),它将在我的应用程序中打开。它已经在桌面上运行,但现在我想在 Android 中实现这个功能。
我知道以前一定有人问过这个问题,但我找不到答案。
我已经发现我需要在 AndroidManifest.xml 中定义一个意图过滤器:
<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="audio/*"/>
</intent-filter>
我做到了,现在如果我点击一个音乐文件,我的应用程序就会打开(或者我可以选择它)。但现在我也需要在 java 部分做一些事情(我确实相信主要活动 onCreate 函数)。我该如何处理?
谢谢你。
解决方案
您指定的意图过滤器已经朝着正确的方向迈出了一步。现在其他(Explorer-like-)应用程序可以启动您的应用程序。下一步,您需要在活动onCreate(...)
函数中接收数据。这可以这样做:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
// Get the intent that started this activity
Intent intent = getIntent();
Uri data = intent.getData();
// Figure out what to do based on the intent type
if (intent.getType().equals("audio")) {
// Handle intents with audio ...
String filePath = data.toString();
// Do some handling here !
}
}
首先,您需要捕获其他应用程序使用的 Intent 来调用您的应用程序。意图包含文件的路径(作为 URI)结构。然后,您唯一需要做的就是获取 URI 字符串并从中获取音乐文件的路径。
可以在此处阅读有关意图过滤的信息: https ://developer.android.com/training/basics/intents/filters
推荐阅读
- performance - gradle install 比 maven install 慢?
- laravel - 依赖于正在测试的工具的功能测试?
- oauth-2.0 - Azure API 管理的 OAuth 安全性是否需要为每个想要将 API 与 OAuth 安全性一起使用的客户端应用程序提供单独的 API?
- woocommerce - 如何过滤 WooCommerce 产品类别小部件中的计数
- javascript - 没有从 axios 请求读取到 nodejs 服务器的 json 数据
- jquery - jquery脚本找不到文件
- c# - 用 C# 项目发送 Selenium emoji
- java - 我需要一个像 AndroidStudio 中的 TextSwitcher 这样的元素
- c# - 电子邮件的正则表达式用户名应以 [a-zA-Z0-9] 开头或结尾,但可能包含破折号、下划线
- javascript - 当我通过解构赋值交换两个元素时,使用变量和数组元素有什么区别