0

モバイルがロックされ、画面がオフになっているときにアプリケーションを実行し続けるためにアラーム サービスを使用していますが、機能しません。

私のアラームサービスクラスは次のとおりです。

public class AlarmService extends BroadcastReceiver {

  // Restart service every 60 seconds
  private static final long REPEAT_TIME = 1000 * 60;

  @Override
  public void onReceive(Context context, Intent intent) {
    AlarmManager service = (AlarmManager) context
        .getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, StartUp_broadcast.class);
    PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
        PendingIntent.FLAG_CANCEL_CURRENT);
    Calendar cal = Calendar.getInstance();
    // Start 60 seconds after boot completed
    cal.add(Calendar.SECOND, 60);
    //
    // Fetch every 60 seconds
    // InexactRepeating allows Android to optimize the energy consumption
    service.setRepeating   (AlarmManager.RTC_WAKEUP,
        cal.getTimeInMillis(), REPEAT_TIME, pending);

    // service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
    // REPEAT_TIME, pending);

  }
} 

私のブロードキャストサービスクラスは次のとおりです。

public class StartUp_broadcast extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent myIntent = new Intent(context, AlarmService.class);
    PendingIntent pendingIntent = PendingIntent.
                                     getService(context, 0, myIntent, 0);
    AlarmManager alarmManager = (AlarmManager) context
                                .getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                  System.currentTimeMillis() + 1000, 1000, pendingIntent);
    Intent Startup_Intent = new Intent(context, LocationService.class);
    Startup_Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startService(Startup_Intent);
}

}

メインの Activity クラスには、WakeLock 用の PowerManager Service があります

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeUp");
    wl.acquire(1000); //wake up the screen
    setContentView(R.layout.main);

    this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

親切に私を助けてください。モバイルがロックされていて scrren がオフのときにアプリケーションを実行し続けるにはどうすればよいですか?

4

3 に答える 3

1

画面ロック時にアプリケーションを実行し、alaram も実行する場合は、起動時にサービスを開始する必要があります。このリンクはあなたに役立つかもしれません。 http://www.androidcompetencycenter.com/2009/06/start-service-at-boot/

最初に読んで、一歩一歩自分でやってください。お役に立てば幸いです。

于 2012-11-19T06:04:58.257 に答える
0

コードは問題ありません。次のように、静的修飾子を使用してアラーム変数をクラス レベルに変更するだけで済みます。

public class AlarmService extends BroadcastReceiver 
{
     private static Intent myIntent;
     private static AlarmManager service;
     private static PendingIntent pendingIntent;
     .
     . 
     .
}
于 2012-11-19T05:41:44.700 に答える
0

アプリが起動するか、サービスが開始されるときに、キーガードのロックを解除してみてください。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

したがって、アプリの実行中は、キー ガードのロックが解除され、画面がオンのままになります。そして、サービスが停止したら、再度キーガードをロックします。

: PowerManager クラスは使用しないでください。バッテリーの減りが早いので。私はこの問題に直面しました。

ありがとう。

于 2012-11-19T05:59:55.393 に答える