每分钟创建一次通知
Create notifications every minute
我想每分钟创建一次通知,我每 48 小时输入另一个关于通知的问题的代码,但应用程序正在运行并且没有创建通知。我究竟做错了什么?
显示通知:
public class ShowNotification extends Service {
private final static String TAG = "ShowNotification";
@Override
public void onCreate() {
super.onCreate();
Intent mainIntent = new Intent(this, MainActivity.class);
NotificationManager notificationManager
= (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification noti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentIntent(PendingIntent.getActivity(this, 0, mainIntent,
PendingIntent.FLAG_UPDATE_CURRENT))
.setContentTitle("New SMS " + System.currentTimeMillis())
.setContentText("Hello")
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.ic_email_white_24dp)
.setTicker("ticker message")
.setWhen(System.currentTimeMillis())
.build();
notificationManager.notify(0, noti);
Log.i(TAG, "Notification created");
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
主要活动:
context = MainActivity.this;
Intent notificationIntent = new Intent(context, ShowNotification.class);
PendingIntent contentIntent = PendingIntent.getService(context, 0, notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.cancel(contentIntent);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
, 1000*60, contentIntent);
一对建议:
使用 IntentService 实现您的通知触发代码。如果您使用 android studio,可以使用一个非常简单的向导来制作一个。只需右键单击一个包>新建>服务>服务(意图服务)。将您的通知触发代码放在句柄操作方法中。这需要在您的清单中声明。
定义一个BroadcastReceiver,最好在不同的文件中调用一个静态方法在其onReceive()中启动intent服务。这个也可以在new>others>BroadcastReciever中的向导中找到。这也需要在您的清单中声明。
创建一个静态方法来初始化警报(我把它放在 IntentService 本身中)并从您的主 activity.
调用它
就像现在一样,您正在为您的通知提供相同的 ID (0)。 这只会替换原来的通知,而不是创建新通知。
以下代码可能会有所帮助:(我使用向导构建它,所以如果自动生成的注释不准确,请忽略它们)
意图服务:
import android.app.AlarmManager;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.Context;
import android.support.v7.app.NotificationCompat;
import java.util.Calendar;
/**
* An {@link IntentService} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p/>
* helper methods.
*/
public class NotificationIntentService extends IntentService {
// TODO: Rename actions, choose action names that describe tasks that this
// IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
private static final String ACTION_FIRENOTIF = "com.example.alarmnotif.action.FOO";
public NotificationIntentService() {
super("NotificationIntentService");
}
public static void initAlarm(Context context) {
Calendar updateTime = Calendar.getInstance();
Intent downloader = new Intent(context, AlarmReceiver.class);
PendingIntent recurringSync = PendingIntent.getBroadcast(context,
0, downloader, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP,
updateTime.getTimeInMillis(),
60000, recurringSync);
}
/**
* Starts this service to perform action FireNotif with the given parameters. If
* the service is already performing a task this action will be queued.
*
* @see IntentService
*/
public static void startActionFireNotif(Context context) {
Intent intent = new Intent(context, NotificationIntentService.class);
intent.setAction(ACTION_FIRENOTIF);
context.startService(intent);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_FIRENOTIF.equals(action)) {
handleActionFireNotif();
}
}
}
/**
* Handle actionFireNotif in the provided background thread with the provided
* parameters.
*/
private void handleActionFireNotif() {
Intent mainIntent = new Intent(this, MainActivity.class);
NotificationManager notificationManager
= (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification noti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentIntent(PendingIntent.getActivity(this, 0, mainIntent,
PendingIntent.FLAG_UPDATE_CURRENT))
.setContentTitle("New SMS " + System.currentTimeMillis())
.setContentText("Hello")
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.ic_email_white_24dp)
.setTicker("ticker message")
.setWhen(System.currentTimeMillis())
.build();
notificationManager.notify(0, noti);
}
}
报警接收器:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
NotificationIntentService.startActionFireNotif(context);
}
}
将以下内容添加到清单中:
<service
android:name=".alarmnotif.NotificationIntentService"
android:exported="false" />
<receiver
android:name=".alarmnotif.AlarmReceiver"
android:enabled="true"
android:exported="false"></receiver>
我想每分钟创建一次通知,我每 48 小时输入另一个关于通知的问题的代码,但应用程序正在运行并且没有创建通知。我究竟做错了什么? 显示通知:
public class ShowNotification extends Service {
private final static String TAG = "ShowNotification";
@Override
public void onCreate() {
super.onCreate();
Intent mainIntent = new Intent(this, MainActivity.class);
NotificationManager notificationManager
= (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification noti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentIntent(PendingIntent.getActivity(this, 0, mainIntent,
PendingIntent.FLAG_UPDATE_CURRENT))
.setContentTitle("New SMS " + System.currentTimeMillis())
.setContentText("Hello")
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.ic_email_white_24dp)
.setTicker("ticker message")
.setWhen(System.currentTimeMillis())
.build();
notificationManager.notify(0, noti);
Log.i(TAG, "Notification created");
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
主要活动:
context = MainActivity.this;
Intent notificationIntent = new Intent(context, ShowNotification.class);
PendingIntent contentIntent = PendingIntent.getService(context, 0, notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.cancel(contentIntent);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
, 1000*60, contentIntent);
一对建议:
使用 IntentService 实现您的通知触发代码。如果您使用 android studio,可以使用一个非常简单的向导来制作一个。只需右键单击一个包>新建>服务>服务(意图服务)。将您的通知触发代码放在句柄操作方法中。这需要在您的清单中声明。
定义一个BroadcastReceiver,最好在不同的文件中调用一个静态方法在其onReceive()中启动intent服务。这个也可以在new>others>BroadcastReciever中的向导中找到。这也需要在您的清单中声明。
创建一个静态方法来初始化警报(我把它放在 IntentService 本身中)并从您的主 activity.
调用它
就像现在一样,您正在为您的通知提供相同的 ID (0)。 这只会替换原来的通知,而不是创建新通知。
以下代码可能会有所帮助:(我使用向导构建它,所以如果自动生成的注释不准确,请忽略它们)
意图服务:
import android.app.AlarmManager;
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.Context;
import android.support.v7.app.NotificationCompat;
import java.util.Calendar;
/**
* An {@link IntentService} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p/>
* helper methods.
*/
public class NotificationIntentService extends IntentService {
// TODO: Rename actions, choose action names that describe tasks that this
// IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
private static final String ACTION_FIRENOTIF = "com.example.alarmnotif.action.FOO";
public NotificationIntentService() {
super("NotificationIntentService");
}
public static void initAlarm(Context context) {
Calendar updateTime = Calendar.getInstance();
Intent downloader = new Intent(context, AlarmReceiver.class);
PendingIntent recurringSync = PendingIntent.getBroadcast(context,
0, downloader, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarms = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP,
updateTime.getTimeInMillis(),
60000, recurringSync);
}
/**
* Starts this service to perform action FireNotif with the given parameters. If
* the service is already performing a task this action will be queued.
*
* @see IntentService
*/
public static void startActionFireNotif(Context context) {
Intent intent = new Intent(context, NotificationIntentService.class);
intent.setAction(ACTION_FIRENOTIF);
context.startService(intent);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_FIRENOTIF.equals(action)) {
handleActionFireNotif();
}
}
}
/**
* Handle actionFireNotif in the provided background thread with the provided
* parameters.
*/
private void handleActionFireNotif() {
Intent mainIntent = new Intent(this, MainActivity.class);
NotificationManager notificationManager
= (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification noti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentIntent(PendingIntent.getActivity(this, 0, mainIntent,
PendingIntent.FLAG_UPDATE_CURRENT))
.setContentTitle("New SMS " + System.currentTimeMillis())
.setContentText("Hello")
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.drawable.ic_email_white_24dp)
.setTicker("ticker message")
.setWhen(System.currentTimeMillis())
.build();
notificationManager.notify(0, noti);
}
}
报警接收器:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
NotificationIntentService.startActionFireNotif(context);
}
}
将以下内容添加到清单中:
<service
android:name=".alarmnotif.NotificationIntentService"
android:exported="false" />
<receiver
android:name=".alarmnotif.AlarmReceiver"
android:enabled="true"
android:exported="false"></receiver>