我想每分钟创建一次通知,我每隔48小时从另一个关于通知的问题中提取代码,但应用程序正在运行并且通知不会被创建。我究竟做错了什么? ShowNotification:
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;
}
}
MainActivity:
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);
答案 0 :(得分:1)
夫妻建议:
使用IntentService实现通知解雇代码。如果您使用的是android studio,则可以使用非常简单的向导进行制作。只需右键单击包> new> Service> Service(意图服务)即可。将通知触发代码放在handle操作方法中。这需要在你的清单中声明。
定义一个BroadcastReceiver,最好在另一个调用静态方法的文件中,在其onReceive()中启动intent服务。这也可以在新的>其他> BroadcastReciever中的向导中使用。这也需要在你的清单中声明。
创建一个静态方法来初始化警报(我把它放在IntentService本身中)并从你的主要活动中调用它。
就像现在一样,您为通知提供了相同的ID(0)。 这只会替换原始通知,而不是创建新通知。
以下代码可能有所帮助:(我使用向导构建它,因此如果它们不准确,请忽略自动生成的注释)
IntentService:
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);
}
}
AlarmReciever:
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>