http://www.eoeandroid.com/thread-263749-1-1.html

好久没有发帖了,这周做了个将音乐设置为来电铃声,短信铃声,联系人铃声这些小功能!额,具体说说方法吧

//add by Aaron
        case R.id.ring_tone://来电铃声
             FileInfo fileInfo = mAdapter.getFirstCheckedFileInfoItem();
             if (fileInfo != null) {
             String tone_path = fileInfo.getFileAbsolutePath(); 
                 Utils.setMyRing(FileManagerOperationActivity.this, tone_path);      
             }
            break;
        //add by Aaron
        case R.id.ring_message://短信铃声
             FileInfo fileInfos = mAdapter.getFirstCheckedFileInfoItem();

if (fileInfos != null) {
                 String message_path =fileInfos.getFileAbsolutePath();     
                 Utils.setMyMessage(FileManagerOperationActivity.this, message_path);                       
             };
            break;
        //add by Aaron
        case R.id.ring_contact://联系人铃声
             Intent intent = new Intent("android.intent.action.contacts.list.PICKMULTICONTACTS");
             intent.setType(Contacts.CONTENT_TYPE);
             startActivityForResult(intent, REQUEST_CODE_TEXT_VCARD);
            break;
        default:
            return false;
        }
        return true;
    }

//add by Aaron
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUEST_CODE_TEXT_VCARD:
                if (data != null) {
                    long[] contactIds = data.getLongArrayExtra("com.mediatek.contacts.list.pickcontactsresult");
                    FileInfo fileInfo = mAdapter.getFirstCheckedFileInfoItem();
                    String path = fileInfo.getFileAbsolutePath();
                    for(int i = 0; i< contactIds.length; i++)
                        {
                          //Uri contactUri = Uri.parse("content://com.android.contacts/raw_contacts/"+contactIds );
                          Utils.setMyContact(FileManagerOperationActivity.this, path, contactIds);
                        }
                } else {

}
                break;
            default:
                break;
           }
    }//这段代码是加在文件管理夹apk下面的,就是三个menu选项,分辨对应设置来电铃声,短信铃声以及联系人铃声

/* Copyright Statement:
*
*add by Aaron
*/

package com.mediatek.filemanager;

import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import java.io.File;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.media.RingtoneManager;
import android.net.Uri;
import android.content.Intent;
import android.provider.MediaStore;
import android.provider.Settings;
import android.widget.Toast;

public class Utils {

//设置为短信铃声
    static void setMyMessage(Context context, String path) {
        File sdfile = new File(path);
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
        values.put(MediaStore.MediaColumns.SIZE, sdfile.length());
        // values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
        values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
        values.put(MediaStore.Audio.Media.IS_ALARM, false);
        values.put(MediaStore.Audio.Media.IS_MUSIC, false);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(path);
        Uri newUri = context.getContentResolver().insert(uri, values);

Intent i = new Intent("com.android.mms.change.ring");
        i.putExtra("newUri", newUri.toString());
        context.sendBroadcast(i);//发一个广播到短信模块,让短信模块自己修改自己的SharedPreferences

Toast.makeText(context, "setMessage-----"+sdfile.getName()+"---------------->",
                Toast.LENGTH_SHORT).show();
    }

//设置为联系人铃声
    static void setMyContact(Context context, String path, long id){
        File sdfile = new File(path);
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());
        values.put(MediaStore.MediaColumns.SIZE, sdfile.length());
        // values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
        values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
        values.put(MediaStore.Audio.Media.IS_ALARM, false);
        values.put(MediaStore.Audio.Media.IS_MUSIC, false);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(path);
                System.out.println("uri----------------------->"+uri.toString());
        Uri newUri = context.getContentResolver().insert(uri, values);
                System.out.println("newUri----------------------->"+newUri.toString());
        ContentValues contactvalues = new ContentValues();
        contactvalues.put(Contacts.CUSTOM_RINGTONE, newUri.toString());
        context.getContentResolver().update(Contacts.CONTENT_URI,
                contactvalues, Contacts._ID + " = " + String.valueOf(id), null);

Toast.makeText(context, "Contact-------"+sdfile.getName()+"-------------->",
                Toast.LENGTH_SHORT).show();
    }

//设置为来电铃声
    static void setMyRing(Context context, String path) {
        File filePath = new File(path);
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, filePath.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, filePath.getName());

values.put(MediaStore.Audio.Media.IS_RINGTONE, true);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(filePath
                .getAbsolutePath());
        context.getContentResolver().delete(
                uri,
                MediaStore.MediaColumns.DATA + "=\""
                        + filePath.getAbsolutePath() + "\"", null);

Uri newUri = context.getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(context,
                RingtoneManager.TYPE_RINGTONE, newUri);
        Toast.makeText(context, "宸插皢"+filePath.getName()+"璁句负鎵嬫満閾冨0", Toast.LENGTH_SHORT).show();
    }
}//这是一个类,注意了:设置短信铃声并非设置通知铃声哦.....看下图就明白了
好吧,破网络,图片传不上,用adb进入/data/data/com.android.mms/shared_prefs,然后cat com.android.mms_preferences.xml,也就是打开这个XML文件,你会看到类似如下东西

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="pref_key_ringtone">content://media/external/audio/media/196</string>//注意这行就是代表短信铃声的URI了
<string name="pref_key_mms_creation_mode">FREE</string>
<boolean name="pref_key_enable_notifications" value="true" />
<string name="pref_key_sms_save_location">Phone</string>
<string name="pref_key_mms_size_limit">300</string>
<string name="pref_key_sms_input_mode">Automatic</string>
<boolean name="CmccMmsUiMode" value="false" />
<string name="pref_key_mms_priority">Normal</string>
<boolean name="checked_message_limits" value="true" />
<boolean name="pref_key_mms_auto_retrieval" value="true" />
<boolean name="pref_key_wappush_enable" value="true" />
<int name="CmccSimCardInfo" value="0" />
也就是你只要修改了<string name="pref_key_ringtone">content://media/external/audio/media/196</string>就修改成功了,具体看上面的代码

设置联系人铃声就不说了,调用联系人apk,得到id(是long型的),然后修改数据库,搞定,上面代码应该是有小bug的,发现的记得回复哈!                                                           注:本人已经测试成功了的(所以不用怀疑)

将音乐文件设置为来电铃声,短信铃声以及联系人铃声相关推荐

  1. Android FileManager 中点击音乐文件设置为来电铃声 M

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  2. android添加或修改默认来电、短信、闹钟、提示音铃声

    1.修改默认来电.短信.闹钟.提示音铃声 devices/sprd/sharkle/sn15_64v8_go/sn15_64v8_go.mk... PRODUCT_PROPERTY_OVERRIDES ...

  3. 在Emulator上模拟来电、短信等 效果

    在Android Studio中,当我们需要模拟收到短信.或模拟来电时,虽然AS里面有一个自带Android Device Monitor可以调试,但是当我们启动它的时候,往往需要将AS与模拟器断开, ...

  4. 社恐人必备逃跑神器-模拟来电+模拟短信+模拟钱包+模拟关机

    小伙伴们注意:公众号的推送机制不再按照时间前后推送了,微信公众号信息流乱序.君哥建议大家把科技毒瘤君公众号置顶(设为星标⭐),以便第一时间看到推送,非常感谢~,方法如下图: 如果你是一个具有社交恐惧症 ...

  5. android 短信数据库在哪个文件夹,安卓手机的短信备份后存到了哪个文件夹下

    打开备份短信的方法: 1.通过电脑找回手机短信内容的最基本思路,即将保存手机短信容的数据库文件传输到电信上,用相关手机信看工具进找回,对此需要借助第三方ROOt工获取手机ROOT权限. 2.并非所有手 ...

  6. 华为手机备忘录怎样设置每个月12号短信提醒要做的事

    华为手机上可以使用备忘录来记事和提醒,一些功能强大且好用的备忘录工具,比如云便签,不仅能设置定时提醒,还可开启每月指定时间自动重复提醒及短信同步提醒备忘录事项,以短信的形式在每月发送备忘录提醒通知信息 ...

  7. 小米手机因为默认权限设置电话拨号,短信等广播无法使用的解决办法

    今天早上写一个拦截电话拨号的广播,在写完代码后运行测试.开启应用后拨打电话(程序中默认为接收到1500这个拨号数字后启动Activity).可是在我的红米手机上运行后,Logcat一点反应都没有,电话 ...

  8. 如何设置快递送达时短信提醒

    在查询快递的时候,你是不是还在自己手动到官网查,然后查询后还要一个个以短信的方式发送给别人呢?这样的方法太多繁琐,今天小编给大家分享一个新的查询技巧,它不仅能同时查询多个快递物流,还可对物流进行跟踪提 ...

  9. android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信

    以下方法均测试成功 一.用命令模拟 (一).模拟来电 1.打开命令行cmd,输入telnet 回车. 2.然后输入 o localhost 5554 回车,连到Emulator上. 3.输入gsm c ...

最新文章

  1. centos7下selinux永久关闭
  2. 分享 C++命名空间的解释
  3. 【UEditor】百度编辑器插入video视频
  4. java 中的 Scanner
  5. magicAjax问题
  6. C语言描述栈的实现及操作(数组实现)
  7. Netty 5用户指南
  8. php外壳函数,php 方法笔记
  9. python处理多个excel数据_python 数据分析基础 day8-pandas读写多个excel文件
  10. 谨以此送给所有单身的MM
  11. 大数据技术成功案例和趋势 2021-25
  12. 关于keeplive
  13. 新手电脑硬件软件故障解答(二)
  14. magick++配置
  15. 什么是SVC?AVC和SVC有什么区别
  16. HTML颜色名称和颜色代码表
  17. AI带你走进P图新时代
  18. 微信小程序重新发起请求加载页面
  19. 一个 npm 包的坎坷“续命”之生
  20. 2020中兴开发岗笔试题

热门文章

  1. java桌球教程视频,Java桌球小游戏1 - osc_wov79fj7的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. IPv6协议的技术分析
  3. Java基础—如何记录日志(四)
  4. day36 XSS跨站MXSSUXSSFlashXSSPDFXSS
  5. 基于MATLAB的语音信号处理系统的设计
  6. 【C++】继承与多态
  7. python基于yolov3实现的手势控制音乐播放器
  8. Multiple Cameras
  9. C++字符串常量总结
  10. 指针指向字符串常量和给字符数组赋值字符串常量的本质