除了前面介紹的個各類XML文件、圖片文件以外,Android應用可能還須要用到大量其餘類型的資源,好比聲音資源等。實際上,聲音對於Android應用很是重要,選擇合適的音效可讓Android應用增色很多。java
相似聲音文件及其餘各類類型的文件,只要Android沒有爲之提供專門的支持,這種資源都被稱爲原始資源。Android的原始資源能夠放在以下兩個地方。android
Android SDK會爲位於/res/raw/目錄下的資源在R類中生成一個索引項,接下來在XML文件中可經過以下語法格式來訪問它:app
@[<package_name>:]raw/file_nameide
在Java代碼中則按以下語法格式來訪問它:佈局
[<package_name>.]R.raw.<file_name> this
經過上面的索引項,Android應用就能夠很是方便地訪問/res/raw目錄下的原始資源,至於獲取資源後如何處理,則徹底取決於實際項目的須要。spa
AssetManager是一個專門管理/assets/目錄下原始資源的管理類,AssetManager提供了以下兩個方法來訪問Assets資源。code
下面的程序示範瞭如何使用聲音,先在應用的/res/raw/目錄下放入一個bomp.mp3文件——Android SDK會自動處理該目錄下的資源,會在R清單類中爲它生成一個索引項:R.raw.bomp。xml
接下來咱們再往/assets/目錄下放入一個shot.mp3文件——須要經過AssetManager進行管理。blog
下面的程序中定義了兩個按鈕,一個按鈕用於播放/res/raw/目錄下的聲音文件,另外一個用於播放/assets/目錄下的聲音文件。
界面佈局文件以下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/playRaw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放Raw音樂"/> <Button android:id="@+id/playAsset" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放Asset音樂"/> </LinearLayout>
後臺代碼文件以下:
package com.example.studyresources; import java.io.IOException; import android.media.MediaPlayer; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class RawResTest extends Activity { MediaPlayer mediaPlayer1=null; MediaPlayer mediaPlayer2=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_raw_res_test); //直接根據聲音文件的ID來建立MeidaPlayer mediaPlayer1=MediaPlayer.create(this, R.raw.bomb); //獲取該應用的AssetManager AssetManager am=getAssets(); try { //獲取指定文件對應的AssetFileDescriptor AssetFileDescriptor afd=am.openFd("shot.mp3"); mediaPlayer2=new MediaPlayer(); //使用MediaPlayer加載指定的聲音文件 mediaPlayer2.setDataSource(afd.getFileDescriptor()); mediaPlayer2.prepare(); } catch(IOException e) { e.printStackTrace(); } //獲取第一個按鈕,併爲它綁定事件監聽器 Button playRaw=(Button)findViewById(R.id.playRaw); playRaw.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //播放聲音 mediaPlayer1.start(); } }); //獲取第二個按鈕,併爲它綁定事件監聽器 Button playAsset=(Button)findViewById(R.id.playAsset); playAsset.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub mediaPlayer2.start(); }}); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.raw_res_test, menu); return true; } }
上面的程序中第一行粗體字代碼用於獲取/res/raw/目錄下的原始資源文件;第二段粗體字代碼則利用了AssetManager來獲取/assets/目錄下的原始資源文件。
運行程序以下效果: