应用程序关闭时如何获得Android通知

时间:2014-01-16 22:07:06

标签: java android notifications

我想向用户发送通知,即使我的应用已关闭。我听说过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());

    }
}

编辑:我在谈论这种通知 enter image description here

5 个答案:

答案 0 :(得分:2)

GCM可能很棘手,但它是谷歌推荐的做事方式。我所做的就是一步一步地按照这些页面进行操作,它对我起作用,非常快速地启动并运行:

通过C ++服务器发送

如上所述,您有一个要发送通知的C ++服务器。这有点棘手,但可行。这就是你需要的:

通过OpenSSL BIO发布

// 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计划代码获得控制权的时间点,然后执行这些点所需的任何操作。