1

バッテリーレベルを表示するバッテリーウィジェットを作成しようとしています。起動すると正常に動作しますが、しばらくすると動作が停止し、バッテリーレベル0が表示され始めます。不足しているものを理解するのを手伝ってください。

コードは次のとおりです。

public class Widget extends AppWidgetProvider {
    static int level;
static int powers;
AppWidgetManager ap;

@Override
public void onReceive(final Context context, Intent intent) {
    // TODO Auto-generated method stub
    super.onReceive(context, intent);

    System.out.println(intent.getAction());

    if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BATTERY_CHANGED)) {

        int rawlevel = intent.getIntExtra("level", -1);
        int scale = intent.getIntExtra("scale", -1);

        powers = intent.getIntExtra("plugged", -1);

        level = -1;
        if (rawlevel >= 0 && scale > 0) {
            level = (rawlevel * 100) / scale;
        }
        onUpdatew(context);

    }
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[0];

        Intent intent = new Intent(context, xyz.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                intent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.widget_main);

        views.setTextViewText(R.id.txt1, level + "");
        Log.i("Power", powers + "");
        Log.i("Level", level + "");

        views.setOnClickPendingIntent(R.id.iv, pendingIntent);
        appWidgetManager.updateAppWidget(appWidgetId, views);

        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

}

@Override
public void onEnabled(Context context) {
    // TODO Auto-generated method stub
    System.out.println(context.getApplicationContext().registerReceiver(
            this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
    onUpdatew(context);
    super.onEnabled(context);
}

public void onUpdatew(Context context) {
    RemoteViews views = new RemoteViews(context.getPackageName(),
            R.layout.widget_main);

    views.setTextViewText(R.id.txt1, level + "");

    AppWidgetManager myManager = AppWidgetManager.getInstance(context);
    ComponentName myName = new ComponentName(context, Widget.class);
    myManager.updateAppWidget(myName, views);

}}
4

0 に答える 0