0

WhatsApp は、バックグラウンドで実行しているときに常に大音量で通知しているようで、連絡先の 1 つ (カスタム通知音を鳴らしている) が表示されます。

私は同様の効果を作成しようとしています。通知の音量を制御したい。

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 に答える