I just started to learn Android, I'm trying to write a widget which is updating the counter in every seconds, but somewhere it's missing something.I'm getting 1 on the screen. I'm using Android 4 emulator.
package com.ibluekey;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import com.ibluekey.R;
import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
public class WidgetActivity extends AppWidgetProvider {
public static WidgetActivity Widgetke = null;
public static Context context;
public static AppWidgetManager appWidgetManager;
public static int appWidgetIds[];
private Handler mHandler = new Handler();
private static int count=0;
@Override
public void onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds ) {
if (null == context) context = WidgetActivity.context;
if (null == appWidgetManager) appWidgetManager = WidgetActivity.appWidgetManager;
if (null == appWidgetIds) appWidgetIds = WidgetActivity.appWidgetIds;
WidgetActivity.Widgetke = this;
WidgetActivity.context = context;
WidgetActivity.appWidgetManager = appWidgetManager;
WidgetActivity.appWidgetIds = appWidgetIds;
Log.d("PXR", "onUpdate");
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
updateAppWidget(context,appWidgetManager, appWidgetId);
}
}
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
count++;
/*Intent intent = new Intent(context, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
remoteViews.setOnClickPendingIntent(R.id.mainlayout, pendingIntent);
remoteViews.setTextViewText(R.id.test_out, ""+count);
// Tell the widget manager
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);*/
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setTextViewText(R.id.test_out, count+"");
appWidgetManager.updateAppWidget(appWidgetId, views);
}
public static class UpdateService extends Service {
@Override
public void onStart(Intent intent, int startId) {
//WidgetActivity.Widgetke.onUpdate(context, appWidgetManager, appWidgetIds);
//Toast.makeText(context, "Update Widget", Toast.LENGTH_SHORT).show();
WidgetActivity.Widgetke.mHandler.removeCallbacks(WidgetActivity.Widgetke.mUpdateTimeTask);
WidgetActivity.Widgetke.mHandler.postDelayed(WidgetActivity.Widgetke.mUpdateTimeTask, 100);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
WidgetActivity.Widgetke.onUpdate(context, appWidgetManager, appWidgetIds);
WidgetActivity.Widgetke.mHandler.postAtTime(this, 1000);
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ibluekey"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<receiver android:name=".Reciever" android:label="@string/app_name">
<intent-filter>
<action android:name="MyTestIntent" />
</intent-filter>
</receiver>
<receiver android:name="com.ibluekey.WidgetActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widgetprovider" />
</receiver>
<service android:name="com.ibluekey.WidgetActivity$UpdateService" />
</application>
</manifest>
Here is a great tutorial series for creating widgets in Android and updating them at intervals. It starts here: http://android-er.blogspot.com/2010/10/simple-home-screen-app-widget-with.html
And ends here with a recurring timer/alarm: http://android-er.blogspot.com/2010/10/app-widget-using-alarm-manager.html
Basically you need to setup some things in the manifest to listen for a broadcasted intent which updates the widget. It also shows how to create a config activity for the widget.
To create alarms or recurring events you can also use the AlarmManager class.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With