私のアプリには次のコードで通知があります:
//Notification Start
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.n1;
CharSequence tickerText = "Call Blocker";
long when = System.currentTimeMillis(); //now
Notification notification = new Notification(icon, tickerText, when);
Intent notificationIntent = new Intent(context, Main.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
Context context = getApplicationContext();
CharSequence title = "Call Blocker";
text = "Calls will be blocked while driving";
notification.setLatestEventInfo(context, title, text, contentIntent);
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
notificationManager.notify(1, notification);
}
通知は非常によく発射されますが、問題は、通知センターで通知をクリックしてもアプリが起動しないことです。
基本的に、通知をクリックしても何も起こりません!通知をクリックしてからメインアクティビティを開始するには、どうすればよいですか。ありがとう。
以下のコードを参照してください。私はそれを使用しており、HomeActivityを開いています。
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);
Intent notificationIntent = new Intent(context, HomeActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
次に、通知を作成する最新バージョンであるNotificationCompact.Builderクラスを使用した例を示します。
private void startNotification() {
Log.i("NextActivity", "startNotification");
// Sets an ID for the notification
int mNotificationId = 001;
// Build Notification , setOngoing keeps the notification always in status bar
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ldb)
.setContentTitle("Stop LDB")
.setContentText("Click to stop LDB")
.setOngoing(true);
// Create pending intent, mention the Activity which needs to be
//triggered when user clicks on notification(StopScript.class in this case)
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, StopScript.class), PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(contentIntent);
// Gets an instance of the NotificationManager service
NotificationManager mNotificationManager =
(NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
// Builds the notification and issues it.
mNotificationManager.notify(mNotificationId, mBuilder.build());
}
簡単な通知の完全な例については、以下のコードを使用してください。このコードでは、[通知]をクリックした後にアプリケーションを開くことができ、問題が解決します。
public class AndroidNotifications extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button notificationButton = (Button) findViewById(R.id.notificationButton);
notificationButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// Notification Title and Message
Notification("Dipak Keshariya (Android Developer)",
"This is Message from Dipak Keshariya (Android Developer)");
}
}, 0);
}
});
}
// Notification Function
private void Notification(String notificationTitle,
String notificationMessage) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Android.app.Notification notification = new Android.app.Notification(
R.drawable.ic_launcher, "Message from Dipak Keshariya! (Android Developer)",
System.currentTimeMillis());
Intent notificationIntent = new Intent(this, AndroidNotifications.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(AndroidNotifications.this,
notificationTitle, notificationMessage, pendingIntent);
notificationManager.notify(10001, notification);
}
}
詳細については、以下のリンクを参照してください。
この部分を見逃したように見えますが、
notification.contentIntent = pendingIntent;
これを追加してみて、動作するはずです。
以下のコードを使用して、オープンアクティビティの通知を作成します。わたしにはできる。 完全なコードの場合
Intent myIntent = new Intent(context, DoSomething.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
context,
0,
myIntent,
Intent.FLAG_ACTIVITY_NEW_TASK);
myNotification = new NotificationCompat.Builder(context)
.setContentTitle("Exercise of Notification!")
.setContentText("Do Something...")
.setTicker("Notification!")
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_launcher)
.build();
notificationManager =
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(MY_NOTIFICATION_ID, myNotification);
これを使って:
Notification mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_music)
.setContentTitle(songName).build();
mBuilder.contentIntent= PendingIntent.getActivity(this, 0,
new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
contentIntentは、通知がクリックされたときにオープニングアクティビティを処理します
上記の投稿のおかげで、ここに主要な行があります-長いコードの回答から蒸留された-アプリを開くためにクリックリスナーセットで通知を接続するために必要ですアクティビティ。
private Notification getNotification(String messageText) {
Notification.Builder builder = new Notification.Builder(this);
builder.setContentText(messageText);
// ...
Intent appActivityIntent = new Intent(this, SomeAppActivity.class);
PendingIntent contentAppActivityIntent =
PendingIntent.getActivity(
this, // calling from Activity
0,
appActivityIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentAppActivityIntent);
return builder.build();
}
public static void notifyUser(Activity activity, String header,
String message) {
NotificationManager notificationManager = (NotificationManager) activity
.getSystemService(Activity.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(
activity.getApplicationContext(), YourActivityToLaunch.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(activity);
stackBuilder.addParentStack(YourActivityToLaunch.class);
stackBuilder.addNextIntent(notificationIntent);
PendingIntent pIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification.Builder(activity)
.setContentTitle(header)
.setContentText(message)
.setDefaults(
Notification.DEFAULT_SOUND
| Notification.DEFAULT_VIBRATE)
.setContentIntent(pIntent).setAutoCancel(true)
.setSmallIcon(drawable.notification_icon).build();
notificationManager.notify(2, notification);
}
これが私がアプローチした方法です。
public class AppFCMService extends FirebaseMessagingService {
private final static String TAG = "FCM Message";
String notify, requstId, Notification;
PendingIntent pendingIntent;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
//split string and getting order id from notification
String Str = remoteMessage.getNotification().getBody();
String[] tmp;
tmp = Str.split(" ");
String temp1 = tmp[0];
String temp2 = tmp[1];
String id = tmp[2];
notify = temp1 + " " + temp2;
requstId = id;
showNotification(remoteMessage.getNotification().getBody());
}
private void showNotification(String messageBody) {
// check whether session has been initiated or not
if (new SessionHelper(getApplicationContext()).isLoggedIn()) {
if (notify.equalsIgnoreCase("Travel request")) {
Intent intent = new Intent(this, ViewTravelDetailsActivity.class);
intent.putExtra("TravelRequestID", requstId);
intent.putExtra("BackPress", "Notify");
pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
} else if (notify.equalsIgnoreCase("Timesheet replied")) {
Intent intent = new Intent(this, ViewReplyActivity.class);
intent.putExtra("timesheetActivityID", requstId);
intent.putExtra("BackPress", "Notify");
intent.putExtra("RealmData", "DeleteRealm");
intent.putExtra("isToday", "true");
pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
} else {
Intent intent = new Intent(this, Dashboard.class);
intent.putExtra("timesheetActivityID", requstId);
pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
}
} else {
Intent intent = new Intent(this, LoginActivity.class);
intent.putExtra("timesheetActivityID", requstId);
pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
}
Bitmap notifyImage = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(notifyImage)
.setColor(Color.parseColor("#FFE74C3C"))
.setContentTitle("TEST")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
}
私の例を使用して...
public void createNotification() {
NotificationManager notificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon,
"message", System.currentTimeMillis());
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = { 0, 100, 600, 100, 700};
vibrator.vibrate(pattern, -1);
Intent intent = new Intent(this, Main.class);
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
String sms = getSharedPreferences("SMSPREF", MODE_PRIVATE).getString("incoming", "EMPTY");
notification.setLatestEventInfo(this, "message" ,
sms, activity);
notification.number += 1;
notificationManager.notify(0, notification);
}