0

WhatsApp 在后台运行时似乎总是以高音量通知我,并且我的一位联系人(具有自定义通知声音)出现。

我正在尝试创建类似的效果。我想控制通知的音量。

我在 Stack Overflow 上能找到的唯一例子就是这个。

这里的区别在于:

  1. 我的上下文是BroadcastReceiver
  2. 我不是在播放音乐,而是使用基于手机上可用的默认铃声列表的通知声音(类似于 WhatsApp)。

通知管理器基于getSystemService(Context.NOTIFICATION_SERVICE)因此通常可用于流式传输的某些方法似乎不可用。

任何人都可以阐明一些观点。代码:

public class OnAlarmReceiver extends BroadcastReceiver {
private static final int NOTIFY_ME_ID=1337;

private static final String TAG = "OnAlarmReceiver";

@Override
public void onReceive(Context ctxt, Intent intent) {    
    Bundle bundle = intent.getExtras();
    int itemId = bundle.getInt("itemId");
    String itemTitle = bundle.getString("itemTitle");
    int priority = bundle.getInt("priority");
    long listId = bundle.getLong("listId");
    String listTitle = bundle.getString("listTitle");

    Toast.makeText(ctxt, "itemId: " + Integer.toString(itemId), Toast.LENGTH_LONG).show();

    SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(ctxt);
    boolean useNotification=prefs.getBoolean("use_notification", true);

    if (useNotification) {
        NotificationManager mgr = (NotificationManager)ctxt.getSystemService(Context.NOTIFICATION_SERVICE);                                 
        Notification notification = new Notification();         
        if (priority == 1) { // Display red icon
            notification=new Notification(R.drawable.nuvola_apps_kwrite, itemTitle, System.currentTimeMillis());    
        } else { // Display blue icon
            notification=new Notification(R.drawable.nuvola_apps_package_editors, itemTitle, System.currentTimeMillis());               
        }           
        Intent itemEditor = new Intent(ctxt, EditItem.class);
        long lAlarmId = (long) (int) itemId;
        itemEditor.putExtra(DbAdapter.KEY_ITEMS_ITEM_ID, lAlarmId);
        itemEditor.putExtra("listId", listId);
        itemEditor.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent i=PendingIntent.getActivity(ctxt, 0, itemEditor, PendingIntent.FLAG_UPDATE_CURRENT);          
        notification.setLatestEventInfo(ctxt, listTitle, itemTitle, i);         
        String notifyPreference = prefs.getString("notification_sound", "DEFAULT_RINGTONE_URI");                        
        notification.sound = Uri.parse(notifyPreference);

        if (priority == 1) {
            notification.defaults |= Notification.DEFAULT_VIBRATE;
        }           
        mgr.notify(itemId + NOTIFY_ME_ID, notification);
    }
    else {
        Intent i=new Intent(ctxt, AlarmActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ctxt.startActivity(i);
    }
}

}

4

1 回答 1

0

嗯,你试过这个吗?(是的,它使用音频流,但它应该可以工作)

private AudioManager mAudioManager;
private Context ctxt;

mAudioManager = (AudioManager)ctxt.getSystemService(Context.AUDIO_SERVICE);

int streamVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);

mAudioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, streamVolume, 0);
于 2012-08-13T17:57:07.517 回答