android开发解决设置铃声无效问题

本文介绍了在Android开发中遇到的设置自定义铃声无效的问题,分析了原因并提供了解决方案。在尝试多种网上的方法失败后,作者找到了成功设置铃声的方法,但注意到仍有部分机型因厂商定制ROM导致无法生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司用到了设置自定义铃声问题,然后再网上找了一大堆文章,都是复制过来复制过去,最后发现没有一个好使的
比如`//设置–铃声的具体方法

    public void setMyRingtone(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.MIME_TYPE, "audio/*");    
      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 uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());  
      Uri newUri = this.getContentResolver().insert(uri, values);  
      RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);  
      Toast.makeText( getApplicationContext (),"设置来电铃声成功!", Toast.LENGTH_SHORT ).show();  
      System.out.println("setMyRingtone()-----铃声");  
    } `

结果debug了一下发现id获取不到,最后我是这样实现的

 public static void setMyRingtone(String path, Context context){
        File sdFile = new File(path);
        //ComtentValues 用于存储数据的  contenvalues只能存储基本类型的数据
        ContentValues values = new ContentValues();
        //    文件路径
        values.put(MediaStore.MediaColumns.DATA,sdFile.getAbsolutePath());
        //    文件名
        values.put(MediaStore.MediaColumns.TITLE,sdFile.getName());
        //
        values.put(MediaStore.MediaColumns.MIME_TYPE,"audio/*");
        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 uri = MediaStore.Audio.Media.getContentUriForPath(sdFile.getAbsolutePath());
        Cursor cursor = context.getContentResolver().query(uri, null, MediaStore.MediaColumns.DATA + "=?", new String[] { path },null);
      if (cursor.moveToFirst() && cursor.getCount() > 0){
        String _id=cursor.getString(0);
        context.getContentResolver().update(uri, values, MediaStore.MediaColumns.DATA + "=?",new String[] { path });
        Uri newUri = ContentUris.withAppendedId(uri, Long.valueOf(_id));
      }
      //Uri newUri = context.getContentResolver().insert(uri,values);
      //  RingtoneManager.setActualDefaultRingtoneUri(context,RingtoneManager.TYPE_RINGTONE,newUri);
        Toast.makeText(context.getApplicationContext(),"设置来电铃声成功!",Toast.LENGTH_SHORT).show();
        System.out.println("setMyRingtone()-----铃声");
    }

**但最后还是发现有些机型无法生效,最后发现qq音乐盒酷狗音乐也无法生效
,猜想可能是手机厂商定制rom的结果吧。。。。。。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值