1

常にWebサービスをチェックするシナリオがあります。データベースに変更がある場合は、アラートメッセージがポップアップ表示されます。私はWHILELOOPでやりました。

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();
        }

しかし、ここでは、ループが続いているため、出力を取得できません。これを克服する他の方法を教えてください。

4

2 に答える 2

2

特定の実装またはハンドルをトリガーする可能性のある通知をAndroidアプリケーションに自動的にプッシュするクラウドサービスを使用する必要があります。

GCM(Google Cloud Messaging)をご覧ください。

GCMとは何ですか?

Google Cloud Messaging for Android(GCM)は、サーバーからユーザーのAndroid搭載デバイスにデータを送信できるようにするサービスです。これは、サーバーからフェッチする新しいデータがあることをアプリに通知する軽量のメッセージ(たとえば、友人がアップロードした映画)の場合もあれば、最大4kbのペイロードデータを含むメッセージの場合もあります(インスタントメッセージングなどのアプリ)。メッセージを直接消費できます)。上記のリンクは、Googleでアプリを設定するために実行する必要のある手順を示しています。

どうやら、GCM用のアプリを正常にセットアップするmySQLとphpのこのチュートリアルを実行してください

なぜGCMとその利点を使用するのですか?

  • これにより、サーバーでデータベースの変更を常にチェックする必要がなくなり、アプリのパフォーマンスに大きな問題が発生します。
  • 基本的には、データベースに変更があった場合は自動的にコードを呼び出すだけですが、データの変更だけでなく、他の場所でも使用できるので、わざわざチェックする必要はありません。 Googleはその頭痛の種を取ります。

asp.netを使用している場合は、このコードを使用してプッシュをトリガーします

GCMの実装は非常に簡単で、すばやく実装できることを忘れないでください。

于 2013-03-08T12:45:18.440 に答える
1
  1. ui-threadでWebサービスにリクエストを送信しないでください。コードをServiceまたはAsyncTaskに移動します。前者の方が良いです。

  2. このアプローチはエネルギーを消費します。少なくとも、sleep(someTime)を使用してリクエストを行うようにしてください。

于 2013-03-08T12:44:21.217 に答える