widget开发实例代码
16lz
2021-01-25
其实创建一个widget很简单。这里就做了一个简单的demo,作为学习记录。
首先在AndroidManifest.xml中添加如下部分
一个widget其实就是一个receiver
<receiver android:name="WidgetProvider"> <intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <intent-filter> <action android:name="org.yangzc.widget.fresh"></action> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_provider"></meta-data> </receiver>
WidgetProvider.java部分代码如下:
provider需要继承自AppWidgetProvider,这个例子是定时更新widget内容。
package org.yangzc.widget;import java.util.Calendar;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.util.Log;import android.widget.RemoteViews;public class WidgetProvider extends AppWidgetProvider {private String fresh = "org.yangzc.widget.fresh";private Context context;@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {Log.d("d","onUpdate");//super.onUpdate(context, appWidgetManager, appWidgetIds);this.context = context;for(int i=0; i<appWidgetIds.length; i++){int appWidgetId = appWidgetIds[i];RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);views.setTextViewText(R.id.thread, i+":Sdfsdfsdf");appWidgetManager.updateAppWidget(appWidgetId, views);}RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);views.setTextViewText(R.id.thread, ":Sdfsdfsdf");appWidgetManager.updateAppWidget(appWidgetIds[0], views);new MyThread().start();}@Overridepublic void onReceive(Context context, Intent intent) {Log.d("d","onReceive");super.onReceive(context, intent);String action = intent.getAction();if(fresh.equals(action)){RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main);Calendar cal=Calendar.getInstance(); System.out.println(cal.getTime().toLocaleString()); views.setTextViewText(R.id.thread, cal.getTime().toLocaleString());ComponentName thisWidget = new ComponentName(context,WidgetProvider.class);AppWidgetManager.getInstance(context).updateAppWidget(thisWidget, views);}}class MyThread extends Thread{public MyThread(){}@Overridepublic void run() {while(true){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}Intent intent = new Intent(fresh);context.sendBroadcast(intent);}}}}
main.xml
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="wrap_content"android:layout_height="wrap_content"><TextView android:id="@+id/thread" android:layout_width="fill_parent"android:layout_height="wrap_content" android:text="@string/hello" /></LinearLayout>
appwidget_provider.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:minHeight="72px" android:minWidth="72px"android:updatePeriodMillis="3800000" android:initialLayout="@layout/main"></appwidget-provider>
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- android 开发edittext获取焦点时hint消失
- Android设备不root,从App目录下拷贝文件
- [工作积累] android 中添加libssl和libcurl
- Android(安卓)动画实现弹幕效果
- Android(安卓)ListView分组布局改进
- Android(安卓)自定义loading
- Android中GridView的每行自动适应Adapter的个数
- Android(安卓)配置 OpenCV2.3.1