2

このコマンドを使用してサービスを開始できる Main アクティビティがあります

startService(new Intent(Main.this, Myservice.class));

そしてMyserviceクラスはこのようなものです

   public class Myservice extends Service {
private ShakeListener mShaker;
String startell;
SharedPreferences prefs;

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

@Override
public void onCreate() {
    // TODO Auto-generated method stub


    //Something

}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub

    //Do Something to detecting shake
            //Show my notification


}


@Override
public void onDestroy() {
    // TODO Auto-generated method stub

    //Stop Shake detection
            //stop notification


    super.onDestroy();
}


}

私のアプリケーションは正常に動作しますが、約 1 時間後にサービスが自動的に停止します。つまり、約 1 時間後に振動検出が機能しなくなります。:(

少しグーグルで検索したところ、StartForeground を使用する必要があることがわかりましたが、方法がわかりませんでした。

では、コードで StartForeground をどのように使用すればよいでしょうか。

4

3 に答える 3

1

ロックを取得して解放するためのコード

// onCreate()メソッドでウェイクロックを取得します

devicePowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

wakeLock = devicePowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
        if(wakeLock != null){
            if(wakeLock.isHeld() == false){
                wakeLock.acquire();
            }
        }

// onDestroy()メソッドでウェイクロックを解除します

if (wakeLock != null) {
            if(wakeLock.isHeld()){
                wakeLock.release();
                wakeLock = null;
            }
}
于 2012-12-15T07:02:05.783 に答える
0

はい、メソッドを呼び出すことでサービスを開始できますstartService。そして、この例を見てください、それはあなたを助けるでしょう

サンプルプロジェクト

于 2012-12-15T06:18:03.143 に答える
0

デバイスがスリープ状態になるため、サービスが機能しなくなったと思います。常にバックグラウンドで動作させたい場合は、WakeLockを使用してデバイスがスリープ状態になるのを防ぐことができますが、これによりバッテリーの消費が大幅に増加するため、注意してください。

編集:あなたはあなたの方法でset()ロックすることができますonCreateServicerelease()onDestroy()

于 2012-12-15T06:43:30.917 に答える