0

AlarmManager の使用方法を学習するために、1 つのボタンで構成されるアクティビティを作成しました。ボタンが押されると、アクティビティはそれ自体のインテントを作成し、それを 3 秒後に AlarmManager にロードしてから終了します。

アクティビティが開き、ユーザーがボタンを押すと、アクティビティが閉じ、3 秒後にアクティビティが開き、繰り返します。

問題は、3 秒後にアクティビティを開くのではなく、次のエラーが表示されることです。「アプリケーション [myappname] が予期せず停止しました。もう一度お試しください。」代わりにトーストを呼び出す場合を除いて、それは機能しました。

ボタンのコードは次のとおりです。

thanksButton.setOnClickListener(new View.OnClickListener() {
               public void onClick(View view) {
               setResult(RESULT_OK);
               Intent intent = new Intent(myappname.this,
myappnameBroadcastReceiver.class);
               PendingIntent appIntent = PendingIntent.getBroadcast
(myappname.this, 0, intent, 0);
               Calendar calendar = Calendar.getInstance();
               calendar.setTimeInMillis(System.currentTimeMillis());
               calendar.add(Calendar.SECOND, 3);
               AlarmManager am = (AlarmManager)getSystemService
(ALARM_SERVICE);
               am.set(AlarmManager.RTC, calendar.getTimeInMillis(),
appIntent);

               finish();
               }

       });

放送受信機は次のとおりです。

package com.myappname;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class myappnameBroadcastReceiver extends BroadcastReceiver {
       @Override
       public void onReceive(Context context, Intent intent) {
                       context.startActivity(new Intent(context, myappname.class));
       }
}

これがmanifest.xmlの行です

       <receiver
               android:name=".myappnameBroadcastReceiver"
               android:process=":remote">
       </receiver>
4

1 に答える 1

0

アクティビティが開き、ユーザーがボタンを押すと、アクティビティが閉じ、3 秒後にアクティビティが開き、繰り返します。

アラームが鳴ったときにアクティビティを開始するだけであれば、サービスは必要ありません。アクティビティを開始する PendingIntent を作成します。それだけです。MyActivity私のコードで、アクティビティクラスでこれを試してください。

Intent intent = new Intent(MyActivity.this, MyActivity.class);
PendingIntent appIntent = 
        PendingIntent.getActivity(MyActivity.this, 0, intent, 0);
于 2011-01-09T22:08:35.940 に答える