android widget内容显示以及自动更新

天人人 2014-05-30 10:37:12
我编写的AppWidgetProvider,然后通过闹钟在service中更新textview显示时间,可是我的widget不显示时间,每次走到onstart里,更新后widget还是不显示内容。
就是在桌面生成了widget,但是是透明的,看不到widget的内容。
有人能帮忙看下吗?谢谢!

public class MyAppWidgetProvider extends AppWidgetProvider {
public static final String SHOW_TIME = "com.example.my_widget.showtime";


public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
System.out.println("zxl---onUpdate");

Time time = new Time();
time.setToNow();
Intent intent = new Intent(context, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, time.toMillis(true), 60*1000, pendingIntent);
}

@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
System.out.println("zxl---onReceive--->"+context.getPackageName());
}
}



public class UpdateService extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onStart(Intent intent, int startId) {
System.out.println("zxl---UpdateService---onStart--->");
super.onStart(intent, startId);

RemoteViews views = new RemoteViews(getPackageName(),
R.layout.firstappwidget);
java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss");
views.setTextViewText(R.id.tvMsg, "当前时间:" + df.format(new Date()));

Intent intent_t = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent_t, 0);
views.setOnClickPendingIntent(R.id.tvMsg, pendingIntent);

AppWidgetManager.getInstance(this).updateAppWidget(
new ComponentName(this, MyAppWidgetProvider.class), views);

}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("onDestory");
super.onDestroy();
}

}
...全文
375 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
哎,真难 2014-05-30
  • 打赏
  • 举报
回复
这里Context pkg放的是包,你的this不是指向service么
天人人 2014-05-30
  • 打赏
  • 举报
回复
引用 4 楼 heaimnmn 的回复:
那不就有问题了么new ComponentName(this, MyAppWidgetProvider.class)这里的this应该是包名吧
ComponentName的方法是这样的,我放this难道是不对的吗? android.content.ComponentName.ComponentName(Context pkg, Class<?> cls) Create a new component identifier from a Context and Class object. Parameters: pkg A Context for the package implementing the component, from which the actual package name will be retrieved. cls The Class object of the desired component, from which the actual class name will be retrieved.
哎,真难 2014-05-30
  • 打赏
  • 举报
回复
那不就有问题了么new ComponentName(this, MyAppWidgetProvider.class)这里的this应该是包名吧
天人人 2014-05-30
  • 打赏
  • 举报
回复
引用 1 楼 heaimnmn 的回复:
你debug看下那个view,感觉应该是view没生成的原因,还有你的UpdateService 是不是写在内部类里面,那个里面this是不能指向context的
那个service是在onstart的时候进行更新,this是service的
天人人 2014-05-30
  • 打赏
  • 举报
回复
那个service是在onstart的时候进行更新,this是service的
哎,真难 2014-05-30
  • 打赏
  • 举报
回复
你debug看下那个view,感觉应该是view没生成的原因,还有你的UpdateService 是不是写在内部类里面,那个里面this是不能指向context的
哎,真难 2014-05-30
  • 打赏
  • 举报
回复
引用 8 楼 zxlworking1 的回复:
[quote=引用 6 楼 heaimnmn 的回复:] 这里Context pkg放的是包,你的this不是指向service么
你好,你看是这样填写吗? new ComponentName("com.example.my_widget_2","com.example.my_widget_2.UpdateService")[/quote]恩,我是这样写的
天人人 2014-05-30
  • 打赏
  • 举报
回复
我知道了,是小米系统的bug,换成默认主题,就能动态更新了。
天人人 2014-05-30
  • 打赏
  • 举报
回复
引用 6 楼 heaimnmn 的回复:
这里Context pkg放的是包,你的this不是指向service么
你好,你看是这样填写吗? new ComponentName("com.example.my_widget_2","com.example.my_widget_2.UpdateService")
天人人 2014-05-30
  • 打赏
  • 举报
回复
引用 6 楼 heaimnmn 的回复:
这里Context pkg放的是包,你的this不是指向service么
那我这边应该怎么填写?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧