メディアストリームで通知音を再生せずに、どのように通知音を再生できるのかと思っていました。現在、これはメディアプレーヤー経由で実行できますが、メディアファイルとして再生したくないので、通知、アラート、または着信音として再生したいです。ここに私のコードが今どのように見えるかの例を示します:
MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();
まだこれに対する解決策を探している人がいれば、 Androidで着信音/アラーム音を再生する方法 で答えを見つけました。
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
TYPE_NOTIFICATIONをTYPE_ALARMに変更することもできますが、着信音rを追跡して、再生を停止することをお勧めします。たとえば、ユーザーがボタンなどをクリックしたときです。
サウンドを個別に呼び出すのではなく、通知を作成するときにサウンドを含めることでこれを行うことができます。
//Define Notification Manager
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//Define sound URI
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(icon)
.setContentTitle(title)
.setContentText(message)
.setSound(soundUri); //This sets the sound to play
//Display notification
notificationManager.notify(0, mBuilder.build());
デフォルトの通知音を再生したい場合は、NotificationCompat.Builder
クラスの setDefaults(int) メソッドを使用できます。
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(getString(R.string.app_name))
.setContentText(someText)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true);
それがあなたの仕事を達成する最も簡単な方法だと思います。
質問からしばらく経ちましたが、...オーディオストリームタイプを設定しようとしましたか?
mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
準備する前に行う必要があります。
これを試して:
public void ringtone(){
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
}
ほぼ同じ質問がありました。いくつかの調査の後、デフォルトのシステム「通知音」を再生したい場合は、通知を表示してデフォルトの音を使用するよう指示する必要があると思います。また、通知音を再生している場合は、通知メッセージも表示する必要があるという他の回答のいくつかには、議論のために言わなければならないことがあります。
ただし、通知APIを少し調整するだけで、目的に近づけることができます。空の通知を表示して、数秒後に自動的に削除できます。これは私に役立つと思います。多分それはあなたのために働くでしょう。
com.globalmentor.Android.app.Notifications.Java
に、次のような通知音を作成できる便利なメソッドのセットを作成しました。
Notifications.notify(this);
また、LEDが点滅し、振動許可がある場合は、振動が発生します。はい、通知アイコンは通知バーに表示されますが、数秒後に消えます。
この時点で、通知はとにかく消えるので、通知バーにスクロールするティッカーメッセージが表示される場合があることに気付くかもしれません。あなたはこのようにそれを行うことができます:
Notifications.notify(this, 5000, "This text will go away after five seconds.");
このクラスには他にも多くの便利なメソッドがあります。 Subversionリポジトリからライブラリ全体をダウンロードし、Mavenでビルドできます。 globalmentor-coreライブラリに依存します。これは、Mavenでビルドおよびインストールすることもできます。
Intent intent = new Intent(this, MembersLocation.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("type",type);
intent.putExtra("sender",sender);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
String channelId = getString(R.string.default_notification_channel_id);
Uri Emergency_sound_uri=Uri.parse("Android.resource://"+getPackageName()+"/raw/emergency_sound");
// Uri Default_Sound_uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
if(type.equals("emergency"))
{
playSound=Emergency_sound_uri;
}
else
{
playSound= Settings.System.DEFAULT_NOTIFICATION_URI;
}
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setSound(playSound, AudioManager.STREAM_NOTIFICATION)
.setAutoCancel(true)
.setColor(getColor(R.color.dark_red))
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent);
// notificationBuilder.setOngoing(true);//for Android notification swipe delete disabling...
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Since Android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(channelId,
"Channel human readable title",
NotificationManager.IMPORTANCE_HIGH);
AudioAttributes att = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build();
channel.setSound(Emergency_sound_uri, att);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
}
}
if (notificationManager != null) {
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}
Notification および NotificationManager を使用して、必要な通知を表示できます。その後、通知で再生するサウンドをカスタマイズできます。
通知チャンネルにサウンドを設定します
Uri alarmUri = Uri.fromFile(new File(<path>));
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
channel.setSound(alarmUri, attributes);
「通知音」の概念は、Android UIのどこかで間違っていると思います。
Androidの予想される動作は、標準の通知を使用してユーザーに警告することです。ステータスバーアイコンなしで通知音を再生すると、ユーザーが混乱します(「その音は何ですか。アイコンはありません。おそらく聴覚に問題がありますか?」)。
通知にサウンドを設定する方法は、たとえば次のとおりです。 通知のサウンドの設定