2013-02-27 56 views
0

我想要做什么: 要将我的铃声设置为传入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(...) 

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

+0

希望这个[链接](http://stackoverflow.com/questions/1271777/how-to-set-ringtone-in-android-from-my-activity)将帮助你:) – 2013-02-27 08:19:29

回答

0

对我来说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);

+0

我已经尝试过那。问题是,当你在sms-app中选择铃声时,这不起作用。它只覆盖通知的默认设置(如果没有在sms-app中选择,则为sms) – PetrD 2013-02-28 06:43:06