我想向用户发送通知,即使我的应用已关闭。我听说过GCM,但我不认为这对我来说是最好的解决方案。我也试过使用Service,但它似乎也没有用。有人知道我该如何表现?
public class notificationService extends Service {
Timer timer;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
timer = new Timer();
timer.schedule(new RemindTask(), 10*1000);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onStart(Intent intent, int startId) {
super.onCreate();
}
}
class RemindTask extends TimerTask {
public void run() {
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.icone)
.setContentTitle("My notification")
.setContentText("Hello World!");
Intent resultIntent = new Intent(this, Acceuil.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(Acceuil.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());
}
}
编辑:我在谈论这种通知
答案 0 :(得分:2)
GCM可能很棘手,但它是谷歌推荐的做事方式。我所做的就是一步一步地按照这些页面进行操作,它对我起作用,非常快速地启动并运行:
如上所述,您有一个要发送通知的C ++服务器。这有点棘手,但可行。这就是你需要的:
// Request
stringstream ss;
string endline = "\r\n";
ss << "POST /gcm/send HTTP/1.0" << endline;
ss << "Host: android.googleapis.com" << endline;
ss << "Accept: */*" << endline;
ss << "Authorization: key=" << mKey << endline;
ss << "Content-Type: application/json" << endline;
ss << "Content-Length: " << ssbody.str().size() << endline;
ss << endline;
ss << ssbody.str();
syslog(LOG_DEBUG, "%s", ss.str().c_str());
int bioResult = 0;
do {
bioResult = BIO_write(mBio, ss.str().c_str(), ss.str().length());
if (bioResult <= 0) {
this->restart();
}
} while (bioResult <= 0);
答案 1 :(得分:1)
您可以使用onStop()或onPause()方法发送消息,具体取决于您要执行的操作。
例如,您可以验证是否仅在应用程序在后台运行时才发送通知,或者确实是在用户关闭应用程序时发送通知。为了更好地理解这两种方法,我建议您在此处查看规范: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
答案 2 :(得分:0)
如果你使用GCM registarar注册设备。你有一个设备ID。如果您的应用仍安装在手机上。你可以在应用关闭时发送通知
答案 3 :(得分:0)
如果您想要推送式通知,我建议您使用亚马逊的推送通知服务。它还包括帮助您入门的示例代码。
如果您不想要推送样式而只是拥有轮询类型(客户端定期检查服务器是否有消息),您可以使用定期向服务器发送通信的服务,如果收到某个响应,您可以创建本地通知。为此,服务应该在启动时启动,以确保用户重新启动手机,并且尚未打开您的应用程序,仍然可以收到通知。
答案 4 :(得分:0)
我的c ++服务器发送的通知
使用GCM将消息传递到需要它们的特定设备。然后,设备上的代码可以按照自己的意愿行事。
或每日通知
使用AlarmManager
计划代码获得控制权的时间点,然后执行这些点所需的任何操作。