在我们打开手机中的文件夹,并点击文件时,会跳出一个dialog的选项面板,上面显示的就是我们点击的文件所有关联的应用,也就是能够用这些应用来读取我们的文件;下面要描述的就是,开发者如在自己的应用中实现点击文件调出相关的应用选项面板以及点击手机中的文件关联到我们自己写的应用程序并显示在面板上。
下面实现的是,点击手机中的音频文件如何关联到我自己写的音乐播放器!
在手机系统自带的应用,已经对点击文件,调出能够处理文件的应用面板作一处理,下面的代码片段是用来启动面板:
public void startSystemIntent(Context context, Uri musicUri, String type) {
Intent intent = new Intent(Intent.ACTION_VIEW); //启动应用程序中对应的Activity
intent.setDataAndType(musicUri , type); //传给应用程序的数据,在这musicUri是文件的路径,type是MIME的类型用来关联我们的相关应用程序(也就是头版)
Intent playIntent = Intent.createChooser(intent, "可选应用程序:"); //重定义系统默认的选项面板, 后面的字符串是定义面板的标题。
//启动面板Dialog
context.startActivity(playIntent);
}
点击了音频文件后,要关联到音乐播放器,该怎么办,继续往下走:
<activity android:name="com.ych.wifibluetoothmusicplayer.demo.MusicPlayActivity"
android:label="@string/app_name"
android:configChanges="orientation"
android:theme="@android:style/Theme.Black.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="audio/*"/>
</intent-filter>
</activity>
此代码来自manifest中,相信你对第一个intent-filter 不陌生,正是系统关联启动程序的入口的标志,那么第二个intent-filter呢,没错这个就是我们上面提到的,看到action.View,
这是上面提到要启动的Activity的入口标志,<data android:mimeType="audio/*" 这个才是我们的主角了,audio 就是和所有音频相关,后面 /* 表示是只要是音频文件,不管是什么格式,都可以关联到这个播放器程序,处理这个文件;
如果 /* 换成 /x-mpeg 表示只有打开mp3文件时,才能关联到这个播放器程序,
如果audio/* 换成 video/* 表示是只要是视频文件,不认是什么格式,都可关联。
下面是一些其他音视频格式相关的MIME的类型:
{".m3u", "audio/x-mpegurl"},
{".m4a", "audio/mp4a-latm"},
{".m4b", "audio/mp4a-latm"},
{".m4p", "audio/mp4a-latm"},
{".m4u", "video/vnd.mpegurl"},
{".m4v", "video/x-m4v"},
{".mov", "video/quicktime"},
{".mp2", "audio/x-mpeg"},
{".mp3", "audio/x-mpeg"},
{".mp4", "video/mp4"},
private void onNewIntent() {
if(getIntent()!=null)
{
String musicPath = getIntent().getData().getPath(); //得到文件的路径,
int songIndex = musicPath.lastIndexOf("/");
// int lll = musicPath.lastIndexOf("-");
int songNameIndex = musicPath.lastIndexOf(".");
String songName = musicPath.substring(songIndex + 1, songNameIndex); //得到歌曲的名字,当然还可以获取歌曲的大小、艺术家
// String kkkString = musicPath.substring(lll+2, songNameIndex);
Log.i("MusicPlayActivity", "" + songName+","+kkkString);
}
}
这个片段来自启动对应的Activity中Oncreate 中调用的方法:之后就是播放器所要处理的事。到此结束。