我被困在一个特殊的场景中.用户从应用程序更新时间后,我需要立即更新我的小部件.我确实通过发送Intent Extras数据来尝试广播,但是没有这样做.当前,我的数据存储在appwidgetprovider中,我需要将此数据发送到服务
公共类CountdownWidget扩展了appwidgetprovider {
// SharedPreferences userDefaults;
// update rate in millisecondspublic static final int UPDATE_RATE = 1800000; // 30 minutepublic static String nameOne = "";@OverrIDepublic voID onDeleted(Context context, int[] appWidgetIDs) { for (int appWidgetID : appWidgetIDs) { setAlarm(context, appWidgetID, -1); } super.onDeleted(context, appWidgetIDs);}@OverrIDepublic voID onReceive(Context context, Intent intent) { // Todo auto-generated method stub Bundle extras = intent.getExtras(); nameOne = extras.getString("name_ONE"); Log.e("name: ", nameOne); super.onReceive(context, intent);}@OverrIDepublic voID onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIDs) { for (int appWidgetID : appWidgetIDs) { setAlarm(context, appWidgetID, UPDATE_RATE); } super.onUpdate(context, appWidgetManager, appWidgetIDs);}public static voID setAlarm(Context context, int appWidgetID, int updaterate) { // Log.e("", "Updating Widget Service"); PendingIntent newPending = makeControlPendingIntent(context, CountdownService.UPDATE, appWidgetID); AlarmManager alarms = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); if (updaterate >= 0) { alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), updaterate, newPending); } else { // on a negative updaterate stop the refreshing alarms.cancel(newPending); }}public static PendingIntent makeControlPendingIntent(Context context, String command, int appWidgetID) { Intent active = new Intent(context, CountdownService.class); active.setAction(command); active.putExtra(AppWidgetManager.EXTRA_APPWidget_ID, appWidgetID); // this Uri data is to make the PendingIntent unique, so it wont be // updated by FLAG_UPDATE_CURRENT // so if there are multiple Widget instances they wont overrIDe each // other Uri data = Uri.withAppendedpath( Uri.parse("countdownWidget://Widget/ID/#" + command + appWidgetID), String.valueOf(appWidgetID)); active.setData(data); return (PendingIntent.getService(context, 0, active, PendingIntent.FLAG_UPDATE_CURRENT));}
}
如您所见,nameOne是一个静态变量.我可以使用getExtras在onReceive方法上接收数据,但是我无法将这些数据传递给CountdownService服务.
我确实尝试了CountdownWidget.nameOne,但仍然无法满足服务中的数据要求.
任何帮助将不胜感激.
解决方法:
您必须创建一个更新小部件的服务,选中this tutorial(第4部分),您可以尝试通过静态变量传输数据.
总结以上是内存溢出为你收集整理的android-从应用程序向小部件发送数据全部内容,希望文章能够帮你解决android-从应用程序向小部件发送数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)