Android AppWidgetProvider 定时刷新问题
2012-06-17 01:46
519 查看
今天按照相关教材学习AppWidgetProvider,但是不知道为什么程序无法自动刷新,相关程序如下:
appwidgetTest.java
import java.text.SimpleDateFormat;
import java.util.Date;
import Android.app.Service;
import Android.appwidget.AppWidgetManager;
import Android.appwidget.AppWidgetProvider;
import Android.content.ComponentName;
import Android.content.Context;
import Android.content.Intent;
import Android.os.IBinder;
import Android.widget.RemoteViews;
public class appwidgetTest extends AppWidgetProvider {
/** Called when the activity is first created. */
public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds){
Intent intent = new Intent(context,UpdateService.class);
context.startService(intent);
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
public static class UpdateService extends Service{
public void onStart(Intent intent,int startId){
super.onStart(intent,startId);
RemoteViews updateViews = new RemoteViews(this.getPackageName(),R.layout.main);
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
updateViews.setTextViewText(R.id.TextView01,""+sdf.format(new Date()));
ComponentName thisWidget = new ComponentName(this,appwidgetTest.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.android.com/apk/res/android"
package="com.hyz"
Android:versionCode="1"
Android:versionName="1.0">
<application
Android:icon="@drawable/icon" android:label="@string/app_name">
<receiver
Android:label="@string/app_name"
Android:name=".appwidgetTest">
<intent-filter>
<action
Android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
</intent-filter>
<meta-data
Android:name="android.appwidget.provider" android:resource="@xml/my_provider"></meta-data>
</receiver>
<service
Android:name=".appwidgetTest$UpdateService"/>
</application>
</manifest>
my_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:Android="http://schemas.android.com/apk/res/android"
Android:minWidth="72dip"
Android:minHeight="72dip"
Android:updatePeriodMillis="1000"
Android:initialLayout="@layout/main"
>
</appwidget-provider>
完全无视我设置的Android:updatePeriodMillis="1000",请教是哪里出错了?完全是按照相关教材来的。
解决方法:
网上找了资料,发现原来1.5以后的版本就不支持刷新了,要自己手写一个timer来刷新程序,具体如下:
appwidgetTest .class
public class appwidgetTest extends AppWidgetProvider {
/** Called when the activity is first created. */
public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context,appWidgetManager), 1, 1000);
}
}
MyTime.class
public class MyTime extends TimerTask{
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
public MyTime(Context context,AppWidgetManager appWidgetManager){
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(),R.layout.main);
thisWidget = new ComponentName(context,appwidgetTest.class);
}
@Override
public void run() {
// TODO Auto-generated method stub
remoteViews.setTextViewText(R.id.TextView01,""+sdf.format(new Date()));
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
其它配置不变
appwidgetTest.java
import java.text.SimpleDateFormat;
import java.util.Date;
import Android.app.Service;
import Android.appwidget.AppWidgetProvider;
import Android.content.ComponentName;
import Android.content.Context;
import Android.content.Intent;
import Android.os.IBinder;
import Android.widget.RemoteViews;
public class appwidgetTest extends AppWidgetProvider {
/** Called when the activity is first created. */
public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds){
Intent intent = new Intent(context,UpdateService.class);
context.startService(intent);
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
public static class UpdateService extends Service{
public void onStart(Intent intent,int startId){
super.onStart(intent,startId);
RemoteViews updateViews = new RemoteViews(this.getPackageName(),R.layout.main);
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
updateViews.setTextViewText(R.id.TextView01,""+sdf.format(new Date()));
ComponentName thisWidget = new ComponentName(this,appwidgetTest.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.android.com/apk/res/android"
package="com.hyz"
Android:versionCode="1"
Android:versionName="1.0">
<application
Android:icon="@drawable/icon" android:label="@string/app_name">
<receiver
Android:label="@string/app_name"
Android:name=".appwidgetTest">
<intent-filter>
<action
Android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
</intent-filter>
<meta-data
Android:name="android.appwidget.provider" android:resource="@xml/my_provider"></meta-data>
</receiver>
<service
Android:name=".appwidgetTest$UpdateService"/>
</application>
</manifest>
my_provider.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:Android="http://schemas.android.com/apk/res/android"
Android:minWidth="72dip"
Android:minHeight="72dip"
Android:updatePeriodMillis="1000"
Android:initialLayout="@layout/main"
>
</appwidget-provider>
完全无视我设置的Android:updatePeriodMillis="1000",请教是哪里出错了?完全是按照相关教材来的。
解决方法:
网上找了资料,发现原来1.5以后的版本就不支持刷新了,要自己手写一个timer来刷新程序,具体如下:
appwidgetTest .class
public class appwidgetTest extends AppWidgetProvider {
/** Called when the activity is first created. */
public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context,appWidgetManager), 1, 1000);
}
}
MyTime.class
public class MyTime extends TimerTask{
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
public MyTime(Context context,AppWidgetManager appWidgetManager){
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(),R.layout.main);
thisWidget = new ComponentName(context,appwidgetTest.class);
}
@Override
public void run() {
// TODO Auto-generated method stub
remoteViews.setTextViewText(R.id.TextView01,""+sdf.format(new Date()));
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
其它配置不变
相关文章推荐
- (转)android AppWidgetProvider 定时刷新问题
- android AppWidgetProvider 定时刷新问题
- Android app开发中刷新问题的详解
- Android完全退出App的一些问题
- Android 定时任务刷新的多种实现方式
- Android app security安全问题总结
- Android项目使用appcompat_v7时遇到的问题
- 解决Android 7.0 App内切换语言不生效的问题
- android ListView 刷新数据,加载时遇到的数组越界问题
- Could not find android-support-v7-appcompat.apk!android问题
- Android中后台定时任务实现,即时数据同步问题思考!
- Android低版本使用ActionBar导入v7-appcompat出现的问题
- Android关于Theme.AppCompat相关问题的解决方案
- java.lang.ClassCastException: android.app.Application cannot be cast to serialport_api.sample.App问题
- android launcher桌面数字时钟及appwidget更新问题
- Android调用系统短信功能,点击返回键返回短信列表而不返回app的问题!
- 【移动安全】Android APP逆向跟踪分析常见问题解决方案
- Android中使用的定时针(刷新页面请求服务器)详解
- Android面试常见问题:如何在不发一个新版本的情况下更新App布局?
- 关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题