1

Activity Recognition API を扱っており、バックグラウンドで実行しようとしています。ということでPlay Servicesに接続して常時稼働するサービスを作ってみました。サービスが破棄され、再度作成されたときに乾杯します。問題は、サービスが実行されていても、しばらくするとアクティビティの検出が停止することです。

以下は、サービスのコードの一部です。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    buildGoogleClient();
    return START_STICKY;
}

private void buildGoogleClient()
{
    mGoogleApiClientActivityDetection = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(ActivityRecognition.API)
            .build();
    mGoogleApiClientActivityDetection.connect();

}

@Override
public void onConnected(Bundle bundle)
{
    if (mGoogleApiClientActivityDetection.isConnected() && detectionConnectionSet == false)
    {
        detectionConnectionSet = true;
        ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(
                mGoogleApiClientActivityDetection,
                Constants.ACTIVITY_DETECTION_INTERVAL_IN_MILLISECONDS,
                PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
    }
}

また、接続されていない場合に再接続する onConnectionSuspended と onConnectionFailed をオーバーライドします。

このコードはしばらくの間正常に動作しますが、突然停止します。誰もが理由についていくつかのアイデアを持っていますか?

ありがとう。

4

2 に答える 2

0

インテント サービスまたは通常のサービスを使用していますか。また、新しいクラスを作成して WakeFulBroadcastReiever に拡張し、マニフェストで同じことを行って、デバイスが起動するとすぐにサービスが開始されるようにする必要があります。

于 2016-02-16T12:40:44.730 に答える