如何覆盖短信铃声

Posted

技术标签:

【中文标题】如何覆盖短信铃声【英文标题】:How to override SMS ringtone 【发布时间】:2013-02-27 07:51:32 【问题描述】:

我想做什么: 将我的铃声设置为传入的SMS,即使SMS app 中有另一个铃声。

我尝试了什么: 在SMS reciever 中,我将音量设置为STREAM_NOTIFICATION to 0,然后尝试通过MediaPlayer 将我的铃声作为媒体播放。

所以基本上是这样的:

am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, 0);
MediaPlayer mp = MediaPlayer.create(context, notifUri);
mp.start();
int duration = mp.getDuration() + 3000;  //Margin
try 
   Thread.sleep(duration);
  catch (InterruptedException e) 
 
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, beforOverrideNotifVol, 0);

发生了什么: 我的自定义铃声播放了,但在此之后,sms-app 的声音也响了。 我尝试向线程添加更多睡眠(让短信应用在后台播放),但它只是等待音量恢复然后播放铃声。

一开始我试过这个:

 RingtoneManager.setActualDefaultRingtoneUri(...)

但它不会覆盖应用程序设置,它只会在短信应用程序中选择铃声时覆盖通知声音。

【问题讨论】:

希望link 能帮到你:) 【参考方案1】:

对我来说 Ringtonemanger.setDefaultRingtoneUri 有效

试着用这个来选择铃声然后设置

 private void chooseTone(int Id) 
    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,
            RingtoneManager.TYPE_RINGTONE);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
    MainActivity.this.startActivityForResult(intent, NotificationId);


@Override
protected void onActivityResult(int requestCode, int resultCode,
        Intent intent) 
    if (resultCode == Activity.RESULT_OK) 
        Uri uri = intent
                .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        Log.d(TAG, "Notification Tone: " + uri);

            if (uri != null)
                this.chosenRingtone = uri;
    

然后最后设置铃声 RingtoneManager.setActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_RINGTONE, selectedRingtone);

【讨论】:

我已经试过了。问题是,当您在短信应用程序中选择了铃声时,这不起作用。它仅覆盖通知的默认设置(如果未在短信应用中选择短信,则覆盖短信)

以上是关于如何覆盖短信铃声的主要内容,如果未能解决你的问题,请参考以下文章

Android 铃声多多APP v8.7.33

如何在Android中设置铃声+震动

苹果电脑如何设置iphone手机铃声

电脑如何给苹果手机设置来电铃声

iphone怎么设置自己的来电铃声??

苹果手机怎么剪切铃声