我需要在点击来自信号的通知时如何打开特定活动。 下面我给出了我迄今为止尝试过的代码。 问题是这仅适用于运行应用程序时。我不需要在运行应用程序时打开该类。
private class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
@Override
public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
try {
Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
} catch (Throwable t)
{
t.printStackTrace();
}
Intent intent = new Intent(getApplication(), MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
private void registerWithOneSignal(String tag) {
OneSignal.startInit(getContext())
.setAutoPromptLocation(true)
.setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
.init();
OneSignal.sendTag("TAG", tag);
OneSignal.idsAvailable(ApplicationSettings.getInstance());
OneSignal.enableVibrate(true);
OneSignal.enableSound(true);
OneSignal.setSubscription(true);
OneSignal.enableNotificationsWhenActive(true);
OneSignal.enableInAppAlertNotification(true);
}
还有Manifest文件
<meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />
答案 0 :(得分:1)
首先确定您的应用程序是否在后台运行。
使用此方法确定
/**
* Method checks if the app is in background or not
*/
public static boolean isAppIsInBackground(Context context) {
boolean isInBackground = true;
try {
ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
ActivityManager.RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
PackageManager pm = context.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
if(!AppUtil.getStringResource(context,R.string.app_name).equalsIgnoreCase(foregroundTaskAppName) ){
isInBackground=false;
}
} catch (PackageManager.NameNotFoundException e) {
isInBackground=false;
}
return isInBackground;
}
根据此值使用此逻辑
Intent resultIntent = new Intent(getApplicationContext(), GCMNotificationActivity.class);//Activity to show once clicked on Notification
resultIntent.putExtra(Constants.PUSH_MESSAGE, message);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//assign result intent to pending intent
PendingIntent resultPendingIntent =PendingIntent.getActivity(getApplicationContext(),0,resultIntent,PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext());
//set Inbox style
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.addLine("message");//set message
Notification notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
.setAutoCancel(true)
.setContentTitle("Title Message")
.setContentIntent(resultPendingIntent)
.setStyle(inboxStyle)
.setWhen(/* set current time here (long)*/)
.setSmallIcon(R.drawable.ic_noti_icon)
.setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(), icon)) /* set icon */
.setContentText(message)
.build();
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(Constants.NOTIFICATION_ID, notification);