本文主要介紹如何將音樂檔案打包到程式中並設定為鈴聲
首先,將我們的鈴聲檔案放到res/raw目錄下,沒有的話就建一個raw目錄
canon.mp3檔案放到raw目錄下
然後在程式裡讀取這個檔案:
代碼為
getResources().openRawResource(R.raw.canon);
然後將讀出的內容寫到sdcard上
程式能直接把sdcard上的一個檔案設定為鈴聲。
具體的實現代碼如下
setring.java
package zy.ring;<br />import java.io.File;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import android.app.Activity;<br />import android.content.ContentValues;<br />import android.media.RingtoneManager;<br />import android.net.Uri;<br />import android.os.Bundle;<br />import android.provider.MediaStore;<br />import android.util.Log;<br />import android.widget.Toast;<br />public class setring extends Activity {<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> InputStream inputStream = null; </p><p> try {<br /> inputStream = getResources().openRawResource(R.raw.canon);<br /> byte[] reader = new byte[inputStream.available()];<br /> while (inputStream.read(reader) != -1) {}<br /> writefile(reader,"/sdcard/canon.mp3");<br /> Log.i("setring", "success");<br /> } catch(IOException e) {<br /> Log.i("setring", e.getMessage());<br /> } finally {<br /> if (inputStream != null) {<br /> try {<br /> inputStream.close();<br /> } catch (IOException e) {<br /> Log.i("setring", e.getMessage());<br /> }<br /> }<br /> } </p><p> setMyRingtone();</p><p> }<br /> public void writefile(byte[] str,String path )<br /> {<br /> File file;<br /> FileOutputStream out;<br /> try {<br /> //建立檔案<br /> file = new File(path);<br /> file.createNewFile();<br /> //開啟檔案file的OutputStream<br /> out = new FileOutputStream(file);</p><p> //將字串轉換成byte數組寫入檔案<br /> out.write(str);<br /> //關閉檔案file的OutputStream<br /> out.close();<br /> } catch (IOException e) {<br /> //將出錯資訊列印到Logcat<br /> DisplayToast(e.toString());</p><p> }<br /> } </p><p> public void setMyRingtone()<br /> {<br /> File k = new File("/sdcard/canon.mp3"); // 設定歌曲路徑<br /> ContentValues values = new ContentValues();<br /> values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());<br /> values.put(MediaStore.MediaColumns.TITLE, k.getName());<br /> values.put(MediaStore.MediaColumns.SIZE, 8474325);<br /> values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");<br /> values.put(MediaStore.Audio.Media.ARTIST, "Madonna");<br /> values.put(MediaStore.Audio.Media.DURATION, 230);<br /> values.put(MediaStore.Audio.Media.IS_RINGTONE, true);<br /> values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);<br /> values.put(MediaStore.Audio.Media.IS_ALARM, false);<br /> values.put(MediaStore.Audio.Media.IS_MUSIC, false);<br /> // Insert it into the database<br /> Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());<br /> Uri newUri = this.getContentResolver().insert(uri, values);<br /> RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);<br /> ;}<br /> public void DisplayToast(String str)<br /> {<br /> Toast.makeText(this,str,Toast.LENGTH_SHORT).show();<br /> }<br />}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="zy.ring"<br /> android:versionCode="1"<br /> android:versionName="1.0"><br /> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".setring"<br /> android:label="@string/app_name"><br /> <intent-filter><br /> <action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br /> </intent-filter><br /> </activity><br /> </application><br /> <uses-sdk android:minSdkVersion="3" /><br /><uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission><br /></manifest>
需要加入許可權
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
程式運行就能將包中的canon.mp3拷貝到sdcard並且設定為預設鈴聲了
當然,你也可以拷貝這個檔案到自己的私人目錄data/data/zy.ring/路徑下也可以
最後我們開啟手機的設定鈴聲介面,可以看到我們的canon.mp3設定成了預設的鈴聲