1

サーバーからメッセージをプルするだけで通知を表示し、常にサービスを実行しているアプリを作成しています。

バックグラウンドで常に実行されている通知サービスが必要です-2分ごと。サービスは Web サービスを呼び出して、新しいメッセージはありますか? を確認します。

そのため、Login Web Service を呼び出して動作を確認するだけのシンプルなサービスを作成しました。しかし、ハングし、応答していないというメッセージが表示されます。突然閉店。

サービスを使用してWebサービスを呼び出す別の方法があるに違いないと確信していますが、正しい方法を見つけることができません。「app.Service」でメッセージをチェックするためにバックグラウンドでWebサービスを呼び出す方法を教えてください。ありがとう

enter code here

public class NotifyService extends Service {
private Long counter = 0L;
private Timer timer = new Timer();

private static String SOAP_ACTION = "http://tempuri.org/Validation";
private static String METHOD_NAME = "Validation";
private static String NAMESPACE = "http://tempuri.org/";
private static String URL = "**********************/Trackingservice.asmx?WSDL";

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    Toast.makeText(this, "Service created ...", Toast.LENGTH_LONG).show();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
        try{
        login();
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Toast.makeText(this, "ERROR ..."+e, Toast.LENGTH_LONG).show();
        }
}
//  @Override
//  public int onStartCommand(Intent intent, int flags, int startId) {
//      try{
//          login();
//          }
//          catch(Exception e)
//          {
//              e.printStackTrace();
//              Toast.makeText(this, "ERROR ..."+e, Toast.LENGTH_LONG).show    ();
//          }
//      return Service.START_NOT_STICKY;
//    }

@Override
public void onDestroy() {
    super.onDestroy();
    Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();
}

public void login() {

    // Initialize soap request + add parameters
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    // Use this to add parameters
    request.addProperty("UserName", "omega");
    request.addProperty("Password", "omega");

    // Declare the version of the SOAP request
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);
    envelope.dotNet = true; // for using Dot Net Web Service

    try {

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        // this is the actual part that will call the webservice
        androidHttpTransport.call(SOAP_ACTION, envelope);
        // Get the SoapResult from the envelope body.
        SoapObject result = (SoapObject) envelope.bodyIn;

        if (result != null) {
            // Get the first property and change the label text
            String temp = result.getProperty(0).toString();
            if (new Boolean(temp)) {
                Toast.makeText(getApplicationContext(), "Login Success",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Login Fails, Please check username and password",
                        Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(getApplicationContext(),
                    "No Response, Service Not availble", Toast.LENGTH_LONG)
                    .show();
        }
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(
                getApplicationContext(),
                " Network Exception : " + e
                        + "Please check network connectivity.",
                Toast.LENGTH_LONG).show();

    }

    }
}
4

1 に答える 1

0

解決策の1つとして、タイマーを使用して要件を満たすことができます::

autoUpdate = new Timer();
    autoUpdate.schedule(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    //call your service from here
                }
            });
        }
    }, 0, 5000);//here provide the duration

お役に立てれば :)

于 2012-11-08T09:06:29.930 に答える