3

このチュートリアルはandroid-erからのものです。メインアクティビティ(AndroidScheduledActivity.java)は、AlarmManagerを起動して、BroadcastReceiver(MyScheduledReceiver.java)を繰り返しトリガーします。MyScheduledReceiverのonReceive()メソッドでは、別のアクティビティ(MyScheduledActivity.java)を間接的に開始します。アクティビティ(MyScheduledActivity.java)がスケジュールされた間隔で開始されるようにします。これで、AutoStartを使用して自動的に起動しましたが、AutoStartNotifyReceiverを作成できませんでした。それを管理する方法を教えてください。どうもありがとう !

メインアクティビティ、AndroidScheduledActivity.java:

public class AndroidScheduledActivity extends Activity {

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      Button buttonStart = (Button)findViewById(R.id.start);
      buttonStart.setOnClickListener(new Button.OnClickListener(){

  @Override
  public void onClick(View arg0) {
    Intent myIntent = new Intent(getBaseContext(),
      MyScheduledReceiver.class);

    PendingIntent pendingIntent
     = PendingIntent.getBroadcast(getBaseContext(),
       0, myIntent, 0);

    AlarmManager alarmManager
      = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 10);
    long interval = 60 * 1000; //
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
      calendar.getTimeInMillis(), interval, pendingIntent);
    finish();
  }});
  }

}

次に、BroadcastReceiver、MyScheduledReceiver.java

public class MyScheduledReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

 Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
 scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(scheduledIntent);
}
}

そして私の問題AutoStartNotifyReceiver:

public class AutoStartNotifyReceiver extends BroadcastReceiver {

 private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED";

 @Override
 public void onReceive(Context context, Intent intent) {

  if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){

????????????????????

  }

 }
}
4

2 に答える 2

7

デバイスAutoStartNotifyReceiver extends BroadcastReceiverがリセットされるとアラームがクリアされるため、クラスがあります。したがって、onReceiveこのクラス (疑問符がある場所)では、 のメソッドでfinish()最初に使用したのと同じコード (もちろん は使用しません) を使用して、もう一度アラームを設定する必要があります。onClickAndroidScheduledActivity

次に、システムの起動時にManifestを起動することをシステムに知らせるために、 に次のエントリを追加する必要があります。AutoStartNotifyReceiver

<receiver android:name=".AutoStartNotifyReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
</receiver>

の許可と同様にManifest

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

さて、これはすべて、アラームが 1 つしかなく、毎回 1 つの方法でのみ設定されていることを前提としています。そうでない場合、これはもう少し複雑になります。しかし、あなたが提供した小さな情報に基づいて、私のソリューションはあなたが望むことをするはずです。

また、あなたはここに来たばかりなので、親切に思い出してください: 誰かが質問に対して適切な回答を提供すると、質問者 (あなた) は回答の横にあるチェックボックスをクリックして回答を受け入れます. これは、回答者が信用を得るためです。SOへようこそ!

于 2012-02-21T23:52:43.337 に答える
1

ありがとう、それは動作します。私のJavaをもう少し改善する必要があります。正確な理由がわからない「コンテキスト」を追加する必要があります。

public class AutoStartNotifyReceiver extends BroadcastReceiver {
    private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED";
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){

             Intent myIntent = new Intent(context, MyScheduledReceiver.class);
             PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  0, myIntent, 0);

             AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
             Calendar calendar = Calendar.getInstance();
             calendar.setTimeInMillis(System.currentTimeMillis());
             calendar.add(Calendar.SECOND, 10);
             long interval = 60 * 1000;
             alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);           
        }
    }
}
于 2012-02-22T11:10:02.930 に答える