2011-01-22 6 views
0

私は、押すと、時間+場所をデータベースに保存するバックグラウンドジョブを起動するアプリウィジェットを作成しようとしています。バックグラウンドジョブを実行するためのウィジェットボタンの設定

私が今までに集めることができたのは、AppWidgetProviderサブクラスで構成されていて、そのonUpdate()がウィジェットボタンを表すRemoteViewにPendingIntentを設定することです。そのonReceive()メソッドは、PendingIntentからのブロードキャストを捕捉し、バックグラウンドジョブを実行するためにここからサービスを開始します。

これまでのところ私が正しい道を歩いているのは、アプリウィジェットをデスクトップに追加する際にonUpdate()が起動されず、ウィジェットボタンが正しくセットアップされないという難題が1つありますそれは何も終わらない)。ウィジェットを設定アクティビティで設定しなければならないのですか?AppWidgetProvider.onUpdate()がトリガされるか、これに簡単な解決策がありますか?

私が正しい軌道に乗っていない場合、私が達成しようとしているものを達成するためのよりよい方法への指針は非常に高く評価されます。 :)

更新:

は、私がここにも、コードの一部を投稿するかもしれないと思いました。ここでは、マニフェストからの受信機の定義は次のとおりです。

<receiver android:name=".widget.QuickAddWidgetProvider" > 
    <intent-filter> 
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/quickadd_widget_info" /> 
</receiver> 

これは、ウィジェットを定義し、私のリソースファイルです:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="72dp" 
    android:minHeight="72dp" 
    android:initialLayout="@layout/quickadd_widget" 
    android:updatePeriodMillis="0"> 
</appwidget-provider> 

これはQuickAddWidgetProviderです:

public class QuickAddWidgetProvider extends AppWidgetProvider { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.v("QuickAdd", "onReceive()"); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     Log.v("QuickAdd", "onUpdate()"); 
    } 
} 

答えて

1

私は場合今のところ正しいトラックにある

はい!私はにonUpdate()がデスクトップにアプリのウィジェットを追加することでトリガされていないため、ウィジェットボタンが正しく設定取得されていないことである1つの課題、(それが何doind終わる)

を持って

まあ、そうすべきです。答えを

<receiver android:name=".AppWidget" android:label="@string/app_name" android:icon="@drawable/icon"> 
     <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_provider"/> 
</receiver> 
+0

ありがとう:マニフェストであなたのAppWidgetProviderのエントリが更新を受け取る権利<intent-filter>があることを確認します。私は、私のインテントフィルターに何か間違っているとは見えません。問題のコードで自分の質問を更新しました。もう1組の目でエラーを見つけられるかもしれません。レコードの場合、ログからonReceive()がトリガーされていることがわかります。それはupdatePeriodMillisが0に設定されていることに関連すると考えられますが、これを変更してもonUpdate()呼び出しは発生しません。 – rogerkk

+0

ああ、btw ..インテントフィルタが正しく設定されていないと、私はウィジェットメニューからウィジェットを得ることができないと思います。 – rogerkk

+0

@rogerkk: 'onUpdate()'は、あなたの現在の実装で 'onRecieve()'のスーパークラスに連鎖しないようにブロックするので、決して呼び出されません。また、AFAIK、ウィジェットメニューは、インテントフィルタではなく、メタデータによって駆動されます。 – CommonsWare

関連する問題