更改BroadcastReceiver中的输出量以获取非流式首选项的通知

时间:2012-08-13 17:19:14

标签: android notifications broadcastreceiver audio

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

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

我在Stack Overflow上找到的唯一例子是this.

这里的区别在于:

  1. 我的上下文是BroadcastReceiver
  2. 我不会播放音乐,而是使用基于手机上可用的默认铃声列表的通知声音(类似于WhatsApp)。
  3. 通知管理器基于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);
        }
    }
    

    }

1 个答案:

答案 0 :(得分: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);