Androidで通知を追加するプログラムが必要です。そして、誰かが通知をクリックすると、それが私の2番目のアクティビティにつながるはずです。
コードを確立しました。通知は機能しているはずですが、何らかの理由で機能していません。 Notification
はまったく表示されません。何が欠けているのか分かりません。
それらのファイルのコード:
Notification n = new Notification.Builder(this)
.setContentTitle("New mail from " + "[email protected]")
.setContentText("Subject")
.setContentIntent(pIntent).setAutoCancel(true)
.setStyle(new Notification.BigTextStyle().bigText(longText))
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected
notificationManager.notify(0, n);
アイコンがなければコードは機能しません。したがって、次のようなビルダーチェーンにsetSmallIcon
呼び出しを追加して、機能するようにします。
.setSmallIcon(R.drawable.icon)
Android 8では、channelId
を使用してNotificationChannel
プロパティを設定するという新しい要件が導入されました。
private NotificationManager mNotificationManager;
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);
NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");
mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);
mNotificationManager =
(NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
// === Removed some obsoletes
if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
String channelId = "Your_channel_id";
NotificationChannel channel = new NotificationChannel(
channelId,
"Channel human readable title",
Android.App.NotificationImportance.Default);
mNotificationManager.createNotificationChannel(channel);
mBuilder.setChannelId(channelId);
}
mNotificationManager.notify(0, mBuilder.build());
実際には ƒernandoValleによる答え は正しくないようです。繰り返しになりますが、あなたは、何が間違っているのか、何が機能していないのかについて言及していないため、あなたの質問は非常に曖昧です。
あなたのコードを見ると、私はNotification
が単に表示されていないと仮定しています。
アイコンを提供しなかったため、通知は表示されていません。 SDKのドキュメントでは必須であるとは記載されていませんが、実際にはそうであり、Notification
はそれなしでは表示されません。
addAction
は4.1以降でのみ使用可能です。それ以前は、PendingIntent
を使用してActivity
を起動していました。 PendingIntent
を指定しているようですので、問題は別の場所にあります。論理的には、不足しているアイコンであると結論付ける必要があります。
小さなアイコンがありませんでした。私は同じ間違いをし、上記の手順でそれを解決しました。
公式ドキュメントに従って: Notification オブジェクトには次が含まれている必要があります。
setSmallIcon() で設定された小さなアイコン
setContentTitle() で設定されたタイトル
setContentText() で設定された詳細テキスト
Android 8.0(APIレベル26)以降、有効な通知チャネルID、 setChannelId()で設定 または、チャンネル作成時にNotificationCompat.Builderコンストラクターで提供されます。
http://developer.Android.com/guide/topics/ui/notifiers/notifications.html を参照してください
これは今日私をつまずかせましたが、 Android 9. (Pie)、Do Not Disturbもデフォルトで Android 8.1 (Oreo)以前のようにすべての通知を黙らせるのではなく、すべての通知を非表示にします。これは通知には適用されません。
私は開発デバイスでDNDをオンにするのが好きなので、DND設定に移動し、設定を変更して通知を無音にするだけで(通知を非表示にしないで)修正しました。
通知チャネルの作成は、通知を表示するための Android 8.1 (Oreo)以降のAndroidバージョンでは必須です。 Oreo + Androidのアプリで通知が表示されない場合、アプリの起動時に次の関数を呼び出す必要があります-
private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviours after this
NotificationManager notificationManager =
getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
私にとっては、deviceToken
の問題でした。受信者と送信者のデバイストークンがデータベース内で適切に更新されているかどうか、または通知を送信するためにアクセスしている場所を確認してください。
たとえば、アプリの起動時にデバイストークンを更新するには、次を使用します。したがって、常に適切に更新されます。
// Device token for Push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
deviceToken = instanceIdResult.getToken();
// Insert device token into Firebase database
fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
}
});
}
});
これがまだアクティブかどうかはわかりませんが、build.gradleファイルを変更し、使用するAndroid SDKバージョンを追加する必要もあります。
実装 'com.Android.support:appcompat-v7:28.0.0'
これは私の場合は魅力のように働いた
Androidアプリでも同じ問題が発生しました。通知を試してみたところ、 Android 7.0 (Nougat)システムを実行しているAndroidエミュレーターで通知が表示されていることがわかりました。 Android 8.1 (Oreo)を持っていた私の電話。
ドキュメントを読んだ後、Androidには通知チャネルと呼ばれる機能があり、これがないとOreoデバイスに通知が表示されないことがわかりました。以下は、通知チャンネルに関するAndroid公式ドキュメントへのリンクです。