FLAG_ACTIVITY_NEW_TASK
を使用して最初に実行されるサービスを取得することができます。うまくいけば、それはこれを行う正しい方法です。しかし、私はプログラムが完全に始まる前にスプラッシュ画面でサービス()を開始する意図を使用しているので、スプラッシュ画面のイメージが機能し、サービスだけがホーム画面に移動することはできません。Androidアプリのバックグラウンドでサービスを維持する方法
どのようにして動作させることができますか? Service
を正しく使用していますか?
ご協力いただければ幸いです。ここで私がこれまで持っているものです。
私のサービスクラス:
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class SpeedManagerService extends Service {
private static final String TAG = "SpeedCheckerService";
@Override
public void onCreate() {
Log.i(TAG, "Service onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Service onStartCommand");
Intent intnt = new Intent(this, SpeedChecker.class);
intnt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intnt);
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
これは私のスプラッシュ画面である:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class SplashActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
/**
* Timer set to spend 3 seconds on splash screen then off to main menu
*/
Thread timerThread = new Thread() {
public void run() {
try {
startService();
sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
Intent intent = new Intent(SplashActivity.this, MenuActivity.class);
startActivity(intent);
}
}
};
timerThread.start();
}
@Override
protected void onPause() {
super.onPause();
finish();
}
public void startService() {
Intent intent = new Intent(this, SpeedManagerService.class);
startService(intent);
}
}
私の全体的なアイデアは、Service
バックグラウンドで実行し、いつでもそれを持っていることですそれが必要なものに到達すると、通知が発生し、通知がクリックされると、他のクラス(otheractivity.class)の1つに移動します。 もっとコードを投稿する必要がある場合はお知らせください。ありがとう!
SpeedChecker.classがある見ます – Angel
あなたが見ている問題には直接関係していない可能性がありますが、 'Handler'を使って単純な遅延を作成するのではなく'タイマー。 Androidで 'Timer'を使う理由はほとんどありません。 –
実際には、「タイマー」はあなたの問題に関係しているかもしれません。ワーカースレッドで 'startService(Intent)'と 'startActivity(Intent)'を呼び出しています。これらのメソッドは、メインスレッドでのみ呼び出される必要があります。 –