从RES /原始文件夹设为铃声 [英] Set ringtone from res/raw folder

查看:184
本文介绍了从RES /原始文件夹设为铃声的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想设定在 / 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆