バッテリーのパーセンテージを表示する簡単なウィジェットを作成しています。ステータスは 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 に報告しています。)