使用Web服务在Android上推送通知

时间:2013-03-08 12:23:26

标签: java android asp.net

我有一个总是检查Web服务的场景。如果DataBase中有更改,则应弹出警报消息。我已经完成了WHILE LOOP。

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Push_notificaton();
        }

public void Push_notificaton(){
    while(true)
    {
        try
        {
SoapObject request = new SoapObject("http://tempuri.org/","getMessage");

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        //Web method call
        HttpTransportSE androidHttpTransport = new HttpTransportSE("http://180.215.66.194/WebService.asmx");
        androidHttpTransport.call("http://tempuri.org/"+ "getMessage", envelope);
        //get the response
        SoapPrimitive response = (SoapPrimitive)envelope.getResponse();

        //the response object can be retrieved by its name: result.getProperty("objectName");
        String message = (String)response.toString();
        if(!currentMsg.equals(message))
        {
        currentMsg=message;
        AlertDialog.Builder alertDialogBuilder = new    AlertDialog.Builder(this);

            // set title
            alertDialogBuilder.setTitle("Your Title");

            // set dialog message
            alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // if this button is clicked, close
                        // current activity
                        MessagesRequestActivity.this.finish();
                    }
                  })
                .setNegativeButton("No",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // if this button is clicked, just close
                        // the dialog box and do nothing
                        dialog.cancel();
                    }
                });

                // create alert dialog
                AlertDialog alertDialog = alertDialogBuilder.create();

                // show it
                alertDialog.show();
        alertDialog.setIcon(R.drawable.ic_launcher);
        alertDialog.show();
        }
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();

        }
        catch (Exception e)
        {
        e.printStackTrace();
        }

但是由于连续循环,我无法获得输出。让我知道从中克服的任何其他方法。

2 个答案:

答案 0 :(得分:2)

您应该使用云服务,它会自动将通知推送到您的Android应用程序,这可能会触发特定的实现或处理。

您应该查看GCM (Google Cloud Messaging)

什么是GCM?

  

适用于Android的Google Cloud Messaging(GCM)是一项允许您使用的服务   将数据从您的服务器发送到用户的Android设备。   这可能是一条轻量级消息,告诉您的应用有新数据   从服务器获取(例如,由电影上传的电影)   朋友),或者它可能是一个包含最多4kb有效载荷数据的消息   (因此即时消息等应用可以直接使用消息)。该   上面的链接显示了您需要完成的步骤   使用谷歌配置你的应用程序。

显然,通过this tutorial查看mySQL和php,成功设置了一个用于GCM的应用程序

为什么要使用GCM及其优势?

  • 它可以帮助您不断检查服务器是否存在数据库更改。这会在您的应用中造成严重的性能问题。
  • 基本上,你要做的就是在数据库发生变化时自动调用一段代码。更可行的是,不仅可以修改数据,也可以在其他地方使用。所以你不必费心每次都检查服务器。谷歌很头疼。

如果您使用的是asp.net。您可以使用这段代码trigger the push

请记住,GCM implementation is very easy and can be quickly implemented

答案 1 :(得分:1)

  1. 不要在ui-thread中对web服务做任何请求。将代码移动到Service或AsyncTask。前者更好。

  2. 这种方法耗能。至少,尝试使用sleep(someTime)发出请求。