应用程序在使用警报管理器创建通知时打开
Application is opening on notification creation using Alarm Manager
这是我正在尝试做的事情:
我正在尝试每天在特定时间触发通知,用户可以在设置屏幕中 select。我目前面临的问题是,每当警报触发并显示通知时,应用程序都会打开和关闭。
请在下面找到我使用过的代码:
MainActivity.java
@Override
protected void onRestart() {
Util.handleNotificationPreferences(this);
super.onResume();
}
Util.java
public static void handleNotificationPreferences(Activity activity) {
SharedPreferences notificationPreferences = activity.getSharedPreferences("com.xyz.abc_prefs, Context.MODE_PRIVATE);
boolean notificationEnabled = notificationPreferences.getBoolean("currencyNotificationOnOff", false);
if(notificationEnabled) {
String time = notificationPreferences.getString("scheduleNotificationTime", "");
String hour = time.split(":")[0];
String minutes = time.split(":")[1];
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
calendar.set(Calendar.MINUTE, Integer.parseInt(minutes));
calendar.set(Calendar.SECOND, 0);
Calendar now = Calendar.getInstance();
if(calendar.getTimeInMillis() < now.getTimeInMillis()) {
calendar.setTimeInMillis(calendar.getTimeInMillis() + 86400000L);
}
AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
//---PendingIntent to launch activity when the alarm triggers---
Intent i = new Intent(activity, NotificationActivity.class);
//---assign an ID of 1---
i.putExtra("notificationId", 1);
PendingIntent displayIntent = PendingIntent.getActivity(
activity.getBaseContext(), 0, i, 0);
//---sets the alarm to trigger---
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), displayIntent);
}
}
NotificationActivity.Java
public class NotificationActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int notificationId = getIntent().getExtras().getInt("notificationId");
Intent resultIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , resultIntent,0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(getResources().getString(R.string.notification_title))
.setContentText(getResources().getString(R.string.notification_text))
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
}
// Gets an instance of the NotificationManager service
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Builds the notification and issues it.
mNotifyMgr.notify(notificationId, mBuilder.build());
finish();
}
}
Intent i = new Intent(activity, NotificationActivity.class);
您正在向系统发出打开 Activity 的指令。
您应该改用创建一个 BroadcastReceiver
,在 AndroidManifest.xml
上注册它并为它创建一个意图 new Intent(activity, NotificationBroadcast.class);
然后在 onReceive
回调中生成并显示通知。
这是我正在尝试做的事情:
我正在尝试每天在特定时间触发通知,用户可以在设置屏幕中 select。我目前面临的问题是,每当警报触发并显示通知时,应用程序都会打开和关闭。
请在下面找到我使用过的代码: MainActivity.java
@Override
protected void onRestart() {
Util.handleNotificationPreferences(this);
super.onResume();
}
Util.java
public static void handleNotificationPreferences(Activity activity) {
SharedPreferences notificationPreferences = activity.getSharedPreferences("com.xyz.abc_prefs, Context.MODE_PRIVATE);
boolean notificationEnabled = notificationPreferences.getBoolean("currencyNotificationOnOff", false);
if(notificationEnabled) {
String time = notificationPreferences.getString("scheduleNotificationTime", "");
String hour = time.split(":")[0];
String minutes = time.split(":")[1];
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));
calendar.set(Calendar.MINUTE, Integer.parseInt(minutes));
calendar.set(Calendar.SECOND, 0);
Calendar now = Calendar.getInstance();
if(calendar.getTimeInMillis() < now.getTimeInMillis()) {
calendar.setTimeInMillis(calendar.getTimeInMillis() + 86400000L);
}
AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
//---PendingIntent to launch activity when the alarm triggers---
Intent i = new Intent(activity, NotificationActivity.class);
//---assign an ID of 1---
i.putExtra("notificationId", 1);
PendingIntent displayIntent = PendingIntent.getActivity(
activity.getBaseContext(), 0, i, 0);
//---sets the alarm to trigger---
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), displayIntent);
}
}
NotificationActivity.Java
public class NotificationActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int notificationId = getIntent().getExtras().getInt("notificationId");
Intent resultIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , resultIntent,0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(getResources().getString(R.string.notification_title))
.setContentText(getResources().getString(R.string.notification_text))
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
}
// Gets an instance of the NotificationManager service
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Builds the notification and issues it.
mNotifyMgr.notify(notificationId, mBuilder.build());
finish();
}
}
Intent i = new Intent(activity, NotificationActivity.class);
您正在向系统发出打开 Activity 的指令。
您应该改用创建一个 BroadcastReceiver
,在 AndroidManifest.xml
上注册它并为它创建一个意图 new Intent(activity, NotificationBroadcast.class);
然后在 onReceive
回调中生成并显示通知。