Android AlarmManager 将额外的 activity 传递给服务
Android AlarmManager Pass extra from activity to service
我尝试关注许多 link,但无论我的额外内容是什么,都为空。首先,我有一个 activity (MainActivity),它将使用服务 (NotifyService) 设置通知。我可以获得服务并在适当的时间出现通知。但是传递字符串似乎是个问题。
在 MainActivity onCreate() 中我有:
Intent myIntent = new Intent(this, NotifyService.class);
//this is what I would like to pass over
myIntent.putExtra("newtitle" ,"this is the new title");
myIntent.putExtra("newcontent" ,"this is the new content");
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 25);
calendar.set(Calendar.HOUR, 11);
calendar.set(Calendar.AM_PM, Calendar.PM);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(MainActivity.this, "Set Alarm", Toast.LENGTH_LONG).show();
在我的 NotifyService onCreate 中我有:
Intent intent = new Intent(this.getApplicationContext(),MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);
//this will be null or give me errors every time
// if (intent.getExtras().containsKey("newtitle"))
// title=(String) intent.getExtras().get("newtitle");
// if (intent.getExtras().containsKey("newcontent"))
// content=(String) intent.getExtras().get("newcontent");
NotificationCompat.Action action = new NotificationCompat.Action.Builder(
R.drawable.basketball, getString(R.string.wearTitle), pendingIntent
).build();
Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification notification = new NotificationCompat.Builder(this)
.setContentText(content)
.setContentTitle(title)
.setSmallIcon(R.drawable.basketball)
.setSound(sound)
.extend(new NotificationCompat.WearableExtender().addAction(action))
.build();
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(001, notification);
主要是我一直在学习这个教程:https://www.youtube.com/watch?v=tyVaPHv-RGo。
我也看过这个link:How can I correctly pass unique extras to a pending intent?
我已经用 PendingIntent 标志尝试了很多事情,但仍然没有成功。我已经看到它完成了意图和服务,但没有任何未决意图。
非常感谢
原来在创建时使用它,我必须使用 onStartCommand。这是代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Toast.makeText(this, "Starting..", Toast.LENGTH_SHORT).show();
Log.d("0",intent.getStringExtra("newtitle"));
title = intent.getStringExtra("newtitle");
content = intent.getStringExtra("newcontent");
Intent myintent = new Intent(this.getApplication(), MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,myintent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action action = new NotificationCompat.Action.Builder(
R.drawable.basketball, getString(R.string.wearTitle), pendingIntent
).build();
Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification notification = new NotificationCompat.Builder(this)
.setContentText(content)
.setContentTitle(title)
.setSmallIcon(R.drawable.basketball)
.setSound(sound)
.extend(new NotificationCompat.WearableExtender().addAction(action))
.build();
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(001, notification);
return PendingIntent.FLAG_UPDATE_CURRENT; // or whatever your flag
}
来自:Pass data from Activity to Service using an Intent
我尝试关注许多 link,但无论我的额外内容是什么,都为空。首先,我有一个 activity (MainActivity),它将使用服务 (NotifyService) 设置通知。我可以获得服务并在适当的时间出现通知。但是传递字符串似乎是个问题。
在 MainActivity onCreate() 中我有:
Intent myIntent = new Intent(this, NotifyService.class);
//this is what I would like to pass over
myIntent.putExtra("newtitle" ,"this is the new title");
myIntent.putExtra("newcontent" ,"this is the new content");
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 25);
calendar.set(Calendar.HOUR, 11);
calendar.set(Calendar.AM_PM, Calendar.PM);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(MainActivity.this, "Set Alarm", Toast.LENGTH_LONG).show();
在我的 NotifyService onCreate 中我有:
Intent intent = new Intent(this.getApplicationContext(),MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);
//this will be null or give me errors every time
// if (intent.getExtras().containsKey("newtitle"))
// title=(String) intent.getExtras().get("newtitle");
// if (intent.getExtras().containsKey("newcontent"))
// content=(String) intent.getExtras().get("newcontent");
NotificationCompat.Action action = new NotificationCompat.Action.Builder(
R.drawable.basketball, getString(R.string.wearTitle), pendingIntent
).build();
Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification notification = new NotificationCompat.Builder(this)
.setContentText(content)
.setContentTitle(title)
.setSmallIcon(R.drawable.basketball)
.setSound(sound)
.extend(new NotificationCompat.WearableExtender().addAction(action))
.build();
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(001, notification);
主要是我一直在学习这个教程:https://www.youtube.com/watch?v=tyVaPHv-RGo。
我也看过这个link:How can I correctly pass unique extras to a pending intent?
我已经用 PendingIntent 标志尝试了很多事情,但仍然没有成功。我已经看到它完成了意图和服务,但没有任何未决意图。
非常感谢
原来在创建时使用它,我必须使用 onStartCommand。这是代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Toast.makeText(this, "Starting..", Toast.LENGTH_SHORT).show();
Log.d("0",intent.getStringExtra("newtitle"));
title = intent.getStringExtra("newtitle");
content = intent.getStringExtra("newcontent");
Intent myintent = new Intent(this.getApplication(), MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,myintent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action action = new NotificationCompat.Action.Builder(
R.drawable.basketball, getString(R.string.wearTitle), pendingIntent
).build();
Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification notification = new NotificationCompat.Builder(this)
.setContentText(content)
.setContentTitle(title)
.setSmallIcon(R.drawable.basketball)
.setSound(sound)
.extend(new NotificationCompat.WearableExtender().addAction(action))
.build();
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(001, notification);
return PendingIntent.FLAG_UPDATE_CURRENT; // or whatever your flag
}
来自:Pass data from Activity to Service using an Intent