从RES /原始文件夹设为铃声 [英] Set ringtone from res/raw folder
问题描述
我想设定在 / RES /生/
文件夹作为默认铃声编程的音频文件。我有以下文件,像这样:的myapp / RES /生/ file.mp3
。
我有以下的code,但不幸的是完全不能设定铃声。我不知道是什么原因造成的问题,但不知道是否任何人有任何见解分享。
URI路径= Uri.parse(android.resource://com.mikan.myapp/res/raw/file.mp3);
RingtoneManager.setActualDefaultRingtoneUri(
getApplicationContext(),RingtoneManager.TYPE_RINGTONE,
路径);
Log.i(TESTT,铃声设置为资源+ path.toString());
RingtoneManager.getRingtone(getApplicationContext(),路径)
。玩();
我收到了以下异常(它被捕获在 RingtoneManager
,使它看起来像什么也没发生在所有的:
03-25 20:20:23.024:D / MediaPlayer的(24659)的setDataSource IOException异常happend:
03-25 20:20:23.024:D / MediaPlayer的(24659):java.io.FileNotFoundException:两个以上的路径段:android.resource://com.mikan.myapp/res/raw/file.mp3
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.content.ContentResolver.getResourceId(ContentResolver.java:861)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:653)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.media.MediaPlayer.setDataSource(MediaPlayer.java:979)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.media.MediaPlayer.setDataSource(MediaPlayer.java:933)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.media.Ringtone.setUri(Ringtone.java:228)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.media.RingtoneManager.getRingtone(RingtoneManager.java:647)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.media.RingtoneManager.getRingtone(RingtoneManager.java:628)
03-25 20:20:23.024:D / MediaPlayer的(24659):在com.mikan.myapp.CustomApp.saveas(CustomApp.java:139)
03-25 20:20:23.024:D / MediaPlayer的(24659):在com.mikan.myapp.ListAdapter $ 1.onClick(ListAdapter.java:83)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.view.View.performClick(View.java:4475)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.view.View $ PerformClick.run(View.java:18786)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.os.Handler.handleCallback(Handler.java:730)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.os.Handler.dispatchMessage(Handler.java:92)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.os.Looper.loop(Looper.java:137)
03-25 20:20:23.024:D / MediaPlayer的(24659):在android.app.ActivityThread.main(ActivityThread.java:5419)
03-25 20:20:23.024:D / MediaPlayer的(24659):在java.lang.reflect.Method.invokeNative(本机方法)
03-25 20:20:23.024:D / MediaPlayer的(24659):在java.lang.reflect.Method.invoke(Method.java:525)
03-25 20:20:23.024:D / MediaPlayer的(24659):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-25 20:20:23.024:D / MediaPlayer的(24659):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-25 20:20:23.024:D / MediaPlayer的(24659):在dalvik.system.NativeStart.main(本机方法)
03-25 20:20:23.024:D / MediaPlayer的(24659):可能在客户端无法打开文件,试图服务器端
请尝试在这个问题<一个解决方案href="http://stackoverflow.com/questions/18100885/set-raw-resource-as-ringtone-in-android">here
档案文件=新的文件(Environment.getExternalStorageDirectory()
/ myRingtonFolder /音频/);
如果(!file.exists()){
file.mkdirs();
}
字符串路径= Environment.getExternalStorageDirectory()
.getAbsolutePath()+/ myRingtonFolder /音频/;
文件f =新的文件(路径+/+名.MP3);
乌里穆里= Uri.parse(android.resource://
+ context.getPackageName()+/生/+姓名);
ContentResolver的MCR = context.getContentResolver();
AssetFileDescriptor音效档;
尝试 {
音效档= mCr.openAssetFileDescriptor(穆里,R);
}赶上(FileNotFoundException异常E){
音效档= NULL;
}
尝试 {
byte []的READDATA =新的字节[1024];
的FileInputStream FIS = soundFile.createInputStream();
FileOutputStream中FOS =新的FileOutputStream(F);
INT I = fis.read(READDATA);
而(ⅰ!= - 1){
fos.write(READDATA,0,I);
I = fis.read(READDATA);
}
fos.close();
}赶上(IOException异常IO){
}
ContentValues值=新ContentValues();
values.put(MediaStore.MediaColumns.DATA,f.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE,姓名);
values.put(MediaStore.MediaColumns.MIME_TYPE,音频/ MP3);
values.put(MediaStore.MediaColumns.SIZE,f.length());
values.put(MediaStore.Audio.Media.ARTIST,R.string.app_name);
values.put(MediaStore.Audio.Media.IS_RINGTONE,真正的);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION,真正的);
values.put(MediaStore.Audio.Media.IS_ALARM,真正的);
values.put(MediaStore.Audio.Media.IS_MUSIC,真正的);
开放的我们的uri = MediaStore.Audio.Media.getContentUriForPath(F
.getAbsolutePath());
乌里newUri = mCr.insert(URI,价值观);
尝试 {
RingtoneManager.setActualDefaultRingtoneUri(背景下,
RingtoneManager.TYPE_RINGTONE,newUri);
Settings.System.putString(MCR,Settings.System.RINGTONE,
newUri.toString());
}赶上(的Throwable T){
}
I am trying to set an audio file in the /res/raw/
folder as the default ringtone programmatically. I have the following file like so: myapp/res/raw/file.mp3
.
I have the following code, but it unfortunately completely fails to set the ringtone. I'm not sure what is causing the issue, but was wondering if anyone had any insight to share.
Uri path = Uri.parse("android.resource://com.mikan.myapp/res/raw/file.mp3");
RingtoneManager.setActualDefaultRingtoneUri(
getApplicationContext(), RingtoneManager.TYPE_RINGTONE,
path);
Log.i("TESTT", "Ringtone Set to Resource: "+ path.toString());
RingtoneManager.getRingtone(getApplicationContext(), path)
.play();
I'm getting the following exception (which is caught within RingtoneManager
, making it look like nothing is happening at all:
03-25 20:20:23.024: D/MediaPlayer(24659): setDataSource IOException happend :
03-25 20:20:23.024: D/MediaPlayer(24659): java.io.FileNotFoundException: More than two path segments: android.resource://com.mikan.myapp/res/raw/file.mp3
03-25 20:20:23.024: D/MediaPlayer(24659): at android.content.ContentResolver.getResourceId(ContentResolver.java:861)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:653)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:979)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:933)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.media.Ringtone.setUri(Ringtone.java:228)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.media.RingtoneManager.getRingtone(RingtoneManager.java:647)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.media.RingtoneManager.getRingtone(RingtoneManager.java:628)
03-25 20:20:23.024: D/MediaPlayer(24659): at com.mikan.myapp.CustomApp.saveas(CustomApp.java:139)
03-25 20:20:23.024: D/MediaPlayer(24659): at com.mikan.myapp.ListAdapter$1.onClick(ListAdapter.java:83)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.view.View.performClick(View.java:4475)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.view.View$PerformClick.run(View.java:18786)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.os.Handler.handleCallback(Handler.java:730)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.os.Handler.dispatchMessage(Handler.java:92)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.os.Looper.loop(Looper.java:137)
03-25 20:20:23.024: D/MediaPlayer(24659): at android.app.ActivityThread.main(ActivityThread.java:5419)
03-25 20:20:23.024: D/MediaPlayer(24659): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 20:20:23.024: D/MediaPlayer(24659): at java.lang.reflect.Method.invoke(Method.java:525)
03-25 20:20:23.024: D/MediaPlayer(24659): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-25 20:20:23.024: D/MediaPlayer(24659): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-25 20:20:23.024: D/MediaPlayer(24659): at dalvik.system.NativeStart.main(Native Method)
03-25 20:20:23.024: D/MediaPlayer(24659): Couldn't open file on client side, trying server side
please try the solution in this question here
File file = new File(Environment.getExternalStorageDirectory(),
"/myRingtonFolder/Audio/");
if (!file.exists()) {
file.mkdirs();
}
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/myRingtonFolder/Audio/";
File f = new File(path + "/", name + ".mp3");
Uri mUri = Uri.parse("android.resource://"
+ context.getPackageName() + "/raw/" + name);
ContentResolver mCr = context.getContentResolver();
AssetFileDescriptor soundFile;
try {
soundFile = mCr.openAssetFileDescriptor(mUri, "r");
} catch (FileNotFoundException e) {
soundFile = null;
}
try {
byte[] readData = new byte[1024];
FileInputStream fis = soundFile.createInputStream();
FileOutputStream fos = new FileOutputStream(f);
int i = fis.read(readData);
while (i != -1) {
fos.write(readData, 0, i);
i = fis.read(readData);
}
fos.close();
} catch (IOException io) {
}
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, name);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.MediaColumns.SIZE, f.length());
values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, true);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(f
.getAbsolutePath());
Uri newUri = mCr.insert(uri, values);
try {
RingtoneManager.setActualDefaultRingtoneUri(context,
RingtoneManager.TYPE_RINGTONE, newUri);
Settings.System.putString(mCr, Settings.System.RINGTONE,
newUri.toString());
} catch (Throwable t) {
}
这篇关于从RES /原始文件夹设为铃声的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!