向所有设备发送通知

Sending notifications to all devices

我有一个可以使用 Google 地图 API 将标记添加到地图的应用程序,我正在尝试向安装了该应用程序的所有设备发送新通知添加了标记,这适用于当前正在使用该应用程序的设备,但不适用于我没有加载该应用程序的其他设备,我还需要做些什么才能在其他设备上注册它吗?

这里是连接到服务器并添加标记的代码,它调用了 showNotification 方法:

try
{
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("http://***.***.***.**/markerLocation/save.php");
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    HttpResponse response = httpClient.execute(httpPost);

    HttpEntity entity = response.getEntity();

    is = entity.getContent();

    String msg = "Data entered successfully";

    //The method call that makes the alert notification
    ShowNotification(name);
    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
}

这里是创建警报的代码:

public  void ShowNotification(String name)
{
    // define sound URI, the sound to be played when there's a notification
    Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    // intent triggered, you can add other intent for other actions
    Intent intent = new Intent(GoogleMapsActivity.this, NotificationReceiver.class);
    PendingIntent pIntent = PendingIntent.getActivity(GoogleMapsActivity.this, 0, intent, 0);

    // this is it, we'll build the notification!
    // in the addAction method, if you don't want any icon, just set the first param to 0
    Notification mNotification = new Notification.Builder(this)


            .setContentTitle(name)
            .setContentText(name + " has added a marker in your area")
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pIntent)
            .setSound(soundUri)

            .addAction(0, "View", pIntent)
            .addAction(0, "Remind", pIntent)

            .build();

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    // If you want to hide the notification after it was selected, do the code below
    mNotification.flags |= Notification.FLAG_AUTO_CANCEL;

    notificationManager.notify(0, mNotification);
}    

首先你需要一个推送服务来警告其他设备你的新标记,然后你需要一个 BroadCastReceiver 来接收推送消息并在所有接收到它的设备上发出通知,我很乐意解释这个和为您编写一些示例代码,但在 Android Docus 中对其进行了广泛解释,那么为什么要重新发明轮子呢?

看看这个页面,它有你需要的一切:

Google Cloud Messaging GCM

我认为您没有理解这两种通知类型的功能。您这样做的方法是在您的服务器上存储所有请求接收通知的用户的设备 ID。然后你从服务器而不是应用程序启动所有设备的通知。从应用程序发起的通知仅在我们应用程序 UI

之外的设备上显示消息

看看这个:https://developer.android.com/google/gcm/index.html

您需要的是对推送通知的某种支持,Android 的明显选择是 Google 云消息传递 (GCM)。

由于您有可用的服务器,您可以自己定制服务器端以管理接收通知的设备(那里有很多教程)。

如果您赶时间并且只想让东西正常工作,您可以使用 parse.com。它们允许您免费向 100 万个唯一设备(通过 GCM)发送推送消息。这里的好处是它们可以更轻松地设置和过滤哪些设备应该接收通知。