2013-02-27 86 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