使用原始资源
android应用除了xml,图片文件,可能还需要大量其他类型资源,比如声音资源。而android未提供专门的支持,这种资源成为原始资源。
原始资源放置两个位置:
1. /res/raw/目录下,android sdk会处理下,在R清单中生成一个索引项
2. /assets/目录下,该目录是更彻底的原始资源,android应用需要通过AssetManager来管理改目录下的原始资源。
针对第一种, xml访问方式:
@[package:]raw/file_name
java访问:
[<package>.]R.raw/<file_name>
针对第二种,
必须通过AssetManager管理类来访问,
InputStream open(String fileName) :根据文件名来获取原始资源对应的输入流
AssetFileDescriptor openFd(String fileName):根据文件名来获取原始资源对应的AssetFileDescriptor 。AssetFileDescriptor 代表一项原始资源描述,应用程序可通过AssetFileDescriptor 获取原始资源。
看如下例子:
java实现:
package com.example.rawrestest;
import android.support.v7.app.ActionBarActivity;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import java.io.IOException;
public class MainActivity extends ActionBarActivity {
MediaPlayer mPlayer1 ;
MediaPlayer mPlayer2 ;
AssetManager am;
private Button raw_play_btn;
private Button am_play_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
raw_play_btn =(Button) findViewById(R.id.button1);
am_play_btn =(Button) findViewById(R.id.button2);
//直接通过声音id来创建MediaPlayer
mPlayer1 = MediaPlayer.create(this, R.raw.wugeku);
am = getAssets();
try {
//获取指定文件对应的AssetFileDescriptor
AssetFileDescriptor afd = am.openFd("tianliang.mp3");
mPlayer2 = new MediaPlayer();
//mPlayer2.reset();
//mPlayer2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
//加载自动声音文件
mPlayer2.setDataSource(afd.getFileDescriptor());
mPlayer2.prepare();
} catch (IOException e) {
// TODO: handle exception
}
raw_play_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mPlayer1.start();
}
});
am_play_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mPlayer2.start();
}
});
}
}
xml布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.rawrestest.MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="46dp"
android:text="播放raw目录的mp3" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="26dp"
android:text="播放assert目录下mp3" />
</RelativeLayout>
效果图: