1

バッテリーのパーセンテージを表示する簡単なウィジェットを作成しています。ステータスは 30 分ごとに更新されます。それはうまくいっています。しかし、ユーザーがウィジェットをクリックすると、そのステータスも更新したいと思います。私はそのコードを実装しました。エミュレーター(Genymotion - Samsung Galaxy S3 - Android 4.1.2)と実際のデバイス(Motorola Moto E - Android 4.4.2)で正常に動作します。ただし、Nokia X では onClick 部分が機能しません。logcat にもエラーはありません。

さまざまな要素 (imageview、layout、textview など) にリスナーを設定しようとしましたが、クリックしてもインテントが呼び出されません。他のサードパーティのウィジェット (Whatsapp、Clock) も確認しましたが、それらのクリック イベントは正常に機能しています。では、この背後にある理由は何でしょうか?

コードは onclick インテントを設定するために使用されます。

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);                

    for(int i=0; i<appWidgetIds.length;i++) {
        int appWidgetId = appWidgetIds[i];
        Intent batteryCheckerIntent = new Intent(context, Main.class);
        batteryCheckerIntent.setAction(WIDGET_CLICKED);

        batteryCheckerIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

        PendingIntent batteryCheckerPendingIntent = PendingIntent.getBroadcast(
                context, 0, batteryCheckerIntent,
                PendingIntent.FLAG_CANCEL_CURRENT);

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);

        remoteViews.setOnClickPendingIntent(R.id.batteryStatusImageView, batteryCheckerPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetId, remoteViews);         
    }       
}

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    Log.i(this.getClass().getName(), "OnReceive is called");    
    if(intent.getAction()==WIDGET_CLICKED) {

        Intent batteryCheckerIntent = new Intent(context, BatteryLevelCheckerService.class);
        context.startService(batteryCheckerIntent);

    } else if(intent.getAction()=="com.ashishtanna.batterystatus.CHECK_BATTERY_LEVEL") {
        Log.i("CHECK BATTERY", "CHECK BATTERY called");

        //If i uncomment the below code, the intent set for onclick event (in the if part) will stop working, it won't even call the onReceive method for onClick

        /*Intent batteryCheckerIntent = new Intent(context, BatteryLevelCheckerService.class);
        context.startService(batteryCheckerIntent);*/
    }
}

アップデート :

できることはすべて試しましたが、Nokia X プラットフォームでは動作しません。1 つのインテントしか実行できないため、バグのように見えます。30 分ごとにサービスを開くインテントを設定すると、onclick イベントのインテント セットが停止し、それを削除すると、onclick インテントが再び機能し始めます。(現在、この問題/バグを Nokia に報告しています。)

4

0 に答える 0