0

AppWidget のインテント処理について質問があります。クリック可能なウィジェットがあり、クリックすると、さらに処理するために AppWidgetProvider 自体にインテントを送信したいと考えています。

問題: 最初は onReceive() でインテントを受け取りますが、しばらくすると (何が原因かわかりません)、onReceive() が呼び出されなくなります。

次のコードがあります。すべて MyWidgetProvider で AppWidgetProvider を拡張します。

a) ブロードキャストを受信するための登録:

in onEnabled(...):
  context.getApplicationContext().registerReceiver(this, new IntentFilter(MY_ACTION));

b)クリック時にインテントが起動されるように設定します。

in onUpdate(...)
  Intent intent= new Intent(MY_ACTION);
  PendingIntent pendingIntent= PendingIntent.getBroadcast(context, 0/*notusedanyway*/, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  views.setOnClickPendingIntent(R.id.widget_root, pendingIntent);

c) イベントに反応して何かをする:

in onReceive(...)
  if (MY_ACTION.equals(intent.getAction())
    doSomething();

ウィジェットをデプロイして追加すると、正常に動作します。ただし、しばらくすると、何が問題を引き起こしているのか正確にはわかりませんが、たとえば電話が影響しているようです-onReceive()で通知を受け取りません。

なぜこれが事実なのか、私は完全に困惑しています。誰かがこれを行う正しい方法を私に指摘できますか?

ありがとう!

トム

4

1 に答える 1

1

AndroidManifest.xml ファイルに登録されている BroadcastReceiver を使用する必要があります。onEnable に登録すると、プロセスに関連付けられます。Android がプロセスを強制終了するたびに (たとえば、電話がかかってきたとき)、レシーバーは存在しなくなり、(観察したように) 機能しなくなります。

于 2011-08-18T18:54:47.130 に答える