2011-10-21 20 views
4

私は、そのウィジェットのレイアウトにボタン付きのアプリウィジェットを持っています。 ボタンをクリックすると、放送受信機を呼び出すインテントが発生します。Android - AppWidgetの保留中のインテントが起動しない

これはうまくいきますが、タスクマネージャーの「メモリを消去」ボタンを使用した後にウィジェットが停止しても何も起こりません。しかし、それが実行されている場合でも、私のアプリから更新を受け取ることができます。

保留中のインテントが実行されないという事実が、メモリクリアフォールトまたは私のフォールトであるかどうかはわかりません。 とにかく、ここでのコードは次のとおりです。

が保留意図(アプリ・ウィジェットのにonUpdate方法)

Intent intent = new Intent(context, ServiceControl.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget); 
    views.setOnClickPendingIntent(R.id.appwidgetbutton, pendingIntent); 

を登録して、ビューでウィジェットを更新します。ここで

アプリウィジェットプロバイダのdeclerationです:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
android:minWidth="72dp" 
android:minHeight="72dp" 
android:initialLayout="@layout/appwidget" 
android:updatePeriodMillis="0"> 
</appwidget-provider> 

私は私は私のアプリ自体からそれを更新し、システムはウィジェットの更新プログラムをコールする必要はありません。

なぜ、保留中の意図は放火を停止するのですか?

ありがとうございます。

+1

Androidに「タスクマネージャー」が組み込まれていないため、「メモリを消去してください」ということはわかりません。これをテストしているAndroidのバージョンは? – CommonsWare

+0

2.3.3ですが、この「タスクマネージャー」はサムスンの携帯電話にとって特別なものだと私は確信しています。私はテストして、私のサムスンギャラクシーS2と私のお父さんのS1でこの問題を持っていたので、おそらくそれはこの "クリアメモリ"の欠陥です。私が与えたコードでは、私がやったことが間違っているからではありません。 – Jong

+1

コードは正常です。あなたの行動が発生するのを見ることができる1つのシナリオは、ユーザーがタスクキラーまたは設定の何かのサービスの管理画面を介してあなたのアプリを抹殺した場合、Android 3.1以降にあります。あなたのアプリは「停止」状態に移行し、ユーザーがあなたの活動の1つを手動で起動するまで、ブロードキャストを受信することはできません。 "クリアメモリ"はタスクキラーのいくつかのバリエーションかもしれないが、私はAndroid-3.1まではno-more-broadcastsルールが有効にならないと確信している。 – CommonsWare

答えて

1

@Jong

@CommonsWare

こんにちはみんなは、私はそれを考え出しました。 OfcこれはAndroidの問題です。受信者は常に受信する必要があります。 これを回避する方法は?明らかにすべてのウィジェットが動作しているので、そこには単純なものがあったに違いない。

ウィジェットクラスが実際にBroadcastReceiverを拡張していることを私に思い出させる、どこかで(その男を見つけようとして)どこかで読みました。

したがって、脅威自体を受け取るために(マニフェスト内に)ウィジェットを登録することができます。したがって、システム全体は、AppWidgetProviderのクラスインスタンスに自己完結しています。

ここで、アプリケーションと通信するために、アプリケーションの静的クラスをonReceiveで呼び出すことができます。アプリケーションがアクティブであれば、LocalBroadcastManagerは失敗しません。それがアクティブでない場合、あなたのボタンはとにかく活動を開始するはずです!

コードが必要な場合は、詳細を記入してください。

関連する問題