2012-04-15 16 views
0

Androidバッテリーウィジェットを作成しようとしています。問題は、時々更新されることがありますが、しばしば更新されないことです。Androidバッテリーウィジェットのアップデートがある場合があります

携帯電話を再起動するか、画面から削除して画面に再度作成する必要があります。

私の問題は何ですか?

ここは私のコードです。これは私の唯一のクラスです。

public class BatteryWidgetProvider extends AppWidgetProvider 
{ 
    private RemoteViews views; 
    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) 
    { 

    context.getApplicationContext().registerReceiver(this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    ComponentName name = new ComponentName(context, BatteryWidgetProvider.class); 
    appWidgetManager.updateAppWidget(name, this.views); 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 
    if(action.equals(intent.ACTION_BATTERY_CHANGED)) 
    { 
     Integer level = intent.getIntExtra("level", -1); 

     this.views.setTextViewText(R.id.batter_level, level.toString() + "%"); 
     ComponentName name = new ComponentName(context, BatteryWidgetProvider.class); 
     AppWidgetManager.getInstance(context).updateAppWidget(name, this.views); 
    } 
    super.onReceive(context, intent); 
} 

私のマニフェストファイルは、次のようになります。..

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".BatteryWidgetProvider"> 
     <intent-filter > 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/appwidget_info"/> 
    </receiver> 
</application> 

ここでは私のinfoファイルです...

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

エラー....

java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000000 (has extras) } in [email protected] 
at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:906) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4633) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at com.batterywidget.BatteryWidgetProvider.onReceive(BatteryWidgetProvider.java:72) 
at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:893) 
+0

私を助けることができる人はいますか? – Mich

+0

これをデバッガで実行しようとしましたか? onReceive/onUpdateにブレークポイントを置き、定期的に呼び出されるかどうかを確認します。それ以上の情報なしで潜在的にあなたのコードに間違っていた可能性があることを言うのは難しいです。いくつかのプリントを試してlogcatを呼び出すと、何が呼び出されているのか、いつ呼び出されるのかを確認できますたぶん受信機を正しく設定していないかもしれません。あるいは、あなたのコードがキャッチされていない例外をスローしているかもしれません。 – Tim

+0

はい、nullpointer例外が存在することがあります。私はそれを上に追加しました – Mich

答えて

0

この見れ:

Caused by: java.lang.NullPointerException 
at com.batterywidget.BatteryWidgetProvider.onReceive(BatteryWidgetProvider.java:72) 

これは、あなたがBatteryWidgetProviderで例外を持っていることを意味し、ライン72は、あなたはその行を検索し、あなたはそれがnullになる可能性が参照しているオブジェクトの内容を確認することはできますか?

+0

これは何ですか? else if(level.intValue()<10) { this.views.setTextViewText(R.id.batter_level、level.toString()+ "%"); } – Mich

+0

私には10のafがあります。 10〜100の範囲である。誰にでもランダムにクラッシュします。 – Mich

+0

あなたはあなたのデバッガを使用し、クラッシュの周りの変数を調べる必要があります。 – Tim

関連する問題