android默认短信铃声设置

foolifooli 发布于 2016/08/22 11:41
阅读 560
收藏 0

@kisaragi 你好,想跟你请教个问题:你好,我想请教一下短信默认铃声设置的问题,您的那个帖子写的我不是很明白,我自己写的代码短信还是需要手动选择,不能够在应用中设置

加载中
0
黛曦葛溪
黛曦葛溪

他的意思是你发一个意图启动选择铃声的弹框以后 ,选择完成后在onActivityResult 中接收到返回给你的uri 也就是铃声文件在数据表中的uri 后,你在你的Acitivity 中调用就可以了。


RingtoneManager.setActualDefaultRingtoneUri(getActivity(),
                        RingtoneManager.TYPE_RINGTONE, uri);


如下是将一个音频文件设置为铃声,这是直接设置,不弹出选择铃声的界面,我们自己将一个文件设置为铃声的情况。(如果你想跳出弹窗供铃声选择就像文章中说的发一个意图启动选择的界面,然后记得接收返回的uri 然后调用上面代码就可以)


public void setRingTone(Context context) {
        String path = "/mnt/sdcard/Music/hh.mp3"
        ContentValues values = new ContentValues();
        if (path != null) {
//根据路径获取URI           
 Uri uri = MediaStore.Audio.Media.getContentUriForPath(path);
            Cursor cursor = context.getContentResolver().query(uri, null,
                    MediaStore.MediaColumns.DATA + "= ?", new String[] {
                    path
            }, null);
            if (cursor != null && cursor.getCount() > 0) {
                cursor.moveToFirst();
                String _id = cursor.getString(0);
                values.put(MediaStore.MediaColumns.TITLE, mRecord.filename);
//下面更改数据表数据                
context.getContentResolver().update(uri, values,
                        MediaStore.MediaColumns.DATA + "=?", new String[] {
                        path
                });
//获取新的uri 之后进行  铃声设置
Uri newUri = ContentUris.withAppendedId(uri, Long.valueOf(_id));
                RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE,
                        newUri);
                return;
            }
            values.put(MediaStore.MediaColumns.DATA, path);
            values.put(MediaStore.MediaColumns.TITLE, mRecord.filename);
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
            values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
            values.put(MediaStore.Audio.Media.IS_ALARM, false);
            values.put(MediaStore.Audio.Media.IS_MUSIC, false);
            Uri newUri = context.getContentResolver().insert(uri, values);
            RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE,
                    newUri);
        }

    }





foolifooli
foolifooli
回复 @黛曦葛溪 : 有个问题,为什么我拿到uri之后,setActualDefaultRingtone(),为通知的时候,一部分手机上短信是没有改变的,要怎么样才能设置短信的铃声呢??还有另外一部分手机,setActualDefaultRingtone()没有起作用,能麻烦您指点一下么?
黛曦葛溪
黛曦葛溪
if 语句块代码你可以选择使用,其实用不用都可已,我这里用了,所以如果if 满足就执行 if 块 return 出去,不满足就直接使用 uri 直接走下面的设置了。我们当时好像有一些需求什么的才写了if 块代码。总之就是拿到 uri 你就可以执行setActualDefaultRingtong了
0
黛曦葛溪
黛曦葛溪

引用来自“黛曦葛溪”的评论

他的意思是你发一个意图启动选择铃声的弹框以后 ,选择完成后在onActivityResult 中接收到返回给你的uri 也就是铃声文件在数据表中的uri 后,你在你的Acitivity 中调用就可以了。


RingtoneManager.setActualDefaultRingtoneUri(getActivity(),
                        RingtoneManager.TYPE_RINGTONE, uri);


如下是将一个音频文件设置为铃声,这是直接设置,不弹出选择铃声的界面,我们自己将一个文件设置为铃声的情况。(如果你想跳出弹窗供铃声选择就像文章中说的发一个意图启动选择的界面,然后记得接收返回的uri 然后调用上面代码就可以)


public void setRingTone(Context context) {
        String path = "/mnt/sdcard/Music/hh.mp3"
        ContentValues values = new ContentValues();
        if (path != null) {
//根据路径获取URI           
 Uri uri = MediaStore.Audio.Media.getContentUriForPath(path);
            Cursor cursor = context.getContentResolver().query(uri, null,
                    MediaStore.MediaColumns.DATA + "= ?", new String[] {
                    path
            }, null);
            if (cursor != null && cursor.getCount() > 0) {
                cursor.moveToFirst();
                String _id = cursor.getString(0);
                values.put(MediaStore.MediaColumns.TITLE, mRecord.filename);
//下面更改数据表数据                
context.getContentResolver().update(uri, values,
                        MediaStore.MediaColumns.DATA + "=?", new String[] {
                        path
                });
//获取新的uri 之后进行  铃声设置
Uri newUri = ContentUris.withAppendedId(uri, Long.valueOf(_id));
                RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE,
                        newUri);
                return;
            }
            values.put(MediaStore.MediaColumns.DATA, path);
            values.put(MediaStore.MediaColumns.TITLE, mRecord.filename);
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
            values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
            values.put(MediaStore.Audio.Media.IS_ALARM, false);
            values.put(MediaStore.Audio.Media.IS_MUSIC, false);
            Uri newUri = context.getContentResolver().insert(uri, values);
            RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE,
                    newUri);
        }

    }





回复 @foolifooli : setActualDefaultRingtoneUri的第二个参数是设置 通知/闹钟之类的 改变这个参数类型 这个不行么? 还有你说部分手机,那就是有些手机这样设置是成功的么? 其实android 系统的话机,因为是开源的所以很多接口都会有所改动,个人做第三方应用的时候觉得魅族手机改动是最大的很多官方api可以使用的方法调用了都无效,这就是开源的一个劣势吧。我们也是做话机研发的,系统框架接口改动也是很大,很多时候若要第三方软件支持我们话机都会提供他们开发文档。你可已尝试看看其他参数有没有用,毕竟每个话机系统改动我们都不清楚,但是有时候他们只是改动一些生效的参数,不会改动太大。
u
unfind
回复 @foolifooli :
foolifooli
foolifooli
回复 @黛曦葛溪 : 对啊,三星的是最接近官方的,我用的方法应该就是官方那种,我看看Log有没有输出什么信息,谢啦
黛曦葛溪
黛曦葛溪
回复 @foolifooli : 你看看Log tag:ActivityManager这个,看看那几个手机 走的是什么,一般会有set 的对象输出,就像Broadast 传递的ACTION 一样能看出来,我不是很确定你是怎么设的,三星手机很多官方api 都支持,UI也最好适配,我觉的是最接近android 官方的了
foolifooli
foolifooli
我测试的几个机型,只有三星和索尼是可以修改的,其他的魅族,坚果,小米,金立都不能设置短信,需要手动在去设置。感觉好郁闷啊
0
u
unfind

我看了几款的铃声设置的软件,酷音铃声、铃声多多、酷狗铃声,在魅族手机上,设置其他的铃声都是没问题,但是就是设置短信铃声又问题。其中酷狗铃声在魅族手机上的设置铃声是最好的,短信铃声很容易就成功了。

返回顶部
顶部