2012-03-16 18 views
6

私は私が私の目的にそのコードを適応しようとしている、と私はストレートアップのコピーペーストを試してみましたが、このようなthis onethis oneにonUpdateが呼び出されることはありません - Androidのウィジェット

として様々なウィジェットチュートリアルを追っています。 私が何をしても、私のウィジェットは更新されません。それがホーム画面に置かれると、テキストは作成されたスタティックテキストのままです。 私はレイアウトに含まれる4つのTextViewsを更新するだけです。

以下のコードは、主にチュートリアルのいずれかからコピーされます。私はonUpdateメソッドをデバッグしようとしましたが、ブレークポイントは決して打撃を受けません。

助けがあれば幸いです。

編集:私は、以前の私の努力で私がしようとしていた。このウィジェットのはるかに単純なバージョンに戻すと、シンプルなウィジェットのコードを以下のコードを置き換えます。 CommonsWareによって提案された変更を私のマニフェストに加えました。残念ながら問題は残っています。

私の主な.javaファイルはそうのようになります。

public class NetStatWidget extends AppWidgetProvider 
{ 

public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds) 
{ 
    ComponentName thisWidget = new ComponentName(context, NetStatWidget.class); 
    int[] widgetId = manager.getAppWidgetIds(thisWidget); 

    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget); 
    remoteView.setTextViewText(R.id.textView0, "Hello"); 
    manager.updateAppWidget(widgetId, remoteView); 
} 

} 

私のマニフェスト:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.stat" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 


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

    </application> 

</manifest> 

そして、私のウィジェットプロバイダー情報:

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

答えて

7

あなたのマニフェストがあります違う。 network.widget.AppWidgetProviderクラス、AFAIKクラスがあると主張していますが、あなたはそうしていません。奇妙な名前のnetwork.widget.NetworkWidgetActivityクラスがあります。 <receiver>要素に、そのうちを使用する必要があります。また

  • あなたがサービス(データベースI/O、ネットワークI/Oなど)により深刻な仕事をしていることを計画していない限りthis

  • this.getApplicationContext()getApplicationContext()を交換し、それは本当に多くのあなたをここに購入いないので、(そしてあなたは、サービスを維持IntentServiceに切り替えて、を取り除くしようとしている場合は、ちょうどonUpdate()にすべてのそのロジックを移動し、サービスを取り払うことを検討それはあなたのために扱われますので)

  • あなたは10秒の更新を求めているが、updatePeriodMillis最小有効は30分です - あなたは

  • int[] widgetIdをデバッグしている間だけの未使用のようです念頭に置いてそれを維持しますin NetworkWidgetActivity

  • onStart()Service)は、数年間使用されなくなりました。 onStartCommand()代わりに

+0

私はあなたの提案に従って私のマニフェストを変更し、まだ同じ問題があります。私は努力の始めにやっていた簡単なウィジェットに戻り、同じ変更を加え、同じ問題を抱えています。私は単純なコードを反映する上記のコードを編集しました。同じ問題がありますか? – Jodron

+0

@ Jodron:いいえ、あなたがAndroid 3.0以降で動作する必要があります。 Android 3.1以上では、あなたのアプリウィジェットに付随するアクティビティが必要です。あなたのアプリウィジェットは、ユーザがアクティビティを実行するまでブロードキャストを受信しません。このディレクトリには別の2つのアプリウィジェットサンプルが含まれています。どちらも動作します:https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget – CommonsWare

+0

これは単なる変です。私は2.3でそれを実行していますが、それでもテキストは更新されません。ウィジェットが配置されるとすぐに "textView0"は "Hello"と読み替えるべきだと私は間違っていますか? 例をありがとう、私はそれを把握することはできませんそれらを見て、私はそれを見ていない。私は私の頭の上にあるかもしれないと思うし、それを通常のアプリにする必要があります。 – Jodron

関連する問題