2012-04-15 4 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> 

Вот мой файл информации ...

<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 и посмотрите, будет ли она вызываться на регулярном интервале? Трудно сказать, что может потенциально пойти не так с вашим кодом без дополнительной информации. Попробуйте выполнить некоторые отпечатки, чтобы узнать, что вы вызываете и когда. Возможно, вы неправильно настроили приемник, или, может быть, ваш код выбрасывает неперехваченное исключение. – Tim

+0

Да иногда есть исключение nullpointer. Я добавил его выше – Mich

ответ

0

Глядя на это:

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

Это означает, что у вас есть исключение в BatteryWidgetProvider, строка 72. Можете ли вы LookUp эту линию и посмотреть, какие объекты вы ссылки там может быть пустым?

+0

Это то, что есть else if (level.intValue() <10) { this.views.setTextViewText (R.id.batter_level, level.toString() + "%"); } – Mich

+0

У меня есть 10 af the elseif. от 10 до 100. Он случайно падает на кого-то. – Mich

+0

Вам нужно будет использовать ваш отладчик и проверить переменные вокруг сбоя. – Tim

Смежные вопросы