Android 开发之简单的Widget

开发一个简单的Widget

Android桌面插件的开发:
- class
- xml
- AndroidManifest


class

AppWidgetProvider
public class MyAppWidgetProvider extends AppWidgetProvider {
    private static final String TAG = "AppWidgetProvider";


    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        Log.w(TAG, "onUpdate method called");
        ComponentName thisWidget = new ComponentName(context,
                MyAppWidgetProvider.class);
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

        Intent intent = new Intent(context.getApplicationContext(),
                RequestService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
        context.startService(intent);

    }

    @Override
    public void onAppWidgetOptionsChanged(Context context,
                                          AppWidgetManager appWidgetManager, int appWidgetId,
                                          Bundle newOptions) {
        Log.d(TAG, "onAppWidgetOptionsChanged");
        super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId,
                newOptions);
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        Log.d(TAG, "onDeleted(): appWidgetIds.length=" + appWidgetIds.length);
        super.onDeleted(context, appWidgetIds);
    }
}

Service
public class RequestService extends Service {
    private static final String TAG = "RequestService";
    private String tt1, tt2, tt3;
    private RemoteViews remoteViews;
    private AppWidgetManager appWidgetManager;
    private int[] allWidgetIds;
    private Context mContext;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.w(TAG, "RequestService called");
        mContext = getApplicationContext();
        remoteViews = new RemoteViews(this
                .mContext.getPackageName(),
                R.layout.appwidget);
        appWidgetManager = AppWidgetManager.getInstance(this.mContext);
        allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
        // 监听点击事件
        Intent clickIntent = new Intent(this.mContext,
                MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, clickIntent, 0);
        remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);

        doSomething();
        return START_NOT_STICKY;
    }
    //自定义刷新时间
    private void startAlarm() {
        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        long triggerAtTime = SystemClock.elapsedRealtime() + 1000 * 10;
        Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
        //>Android4.4
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
        }
    }

    private void doSomething() {
        //刷新插件显示内容
        for (int widgetId : allWidgetIds) {
            remoteViews.setTextViewText(R.id.title1, tt1);
            remoteViews.setTextViewText(R.id.title2, tt2);
            remoteViews.setTextViewText(R.id.title3, tt3);

            appWidgetManager.updateAppWidget(widgetId, remoteViews);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

xml

res/xml/appwidget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:minHeight="120dp"android:minWidth="300dp"android:updatePeriodMillis="86400000"//刷新周期

android:previewImage="@mipmap/ic_launcher"android:initialLayout="@layout/appwidget"android:resizeMode="horizontal|vertical"android:widgetCategory="home_screen|keyguard">

</appwidget-provider>
res/layout/appwidget.xml

桌面插件的布局文件,需要什么加什么;


AndroidManifest

<receiver 
android:name=".widget.MyAppWidgetProvider"><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /><action android:name="com.example.widget.UPDATE" /></intent-filter><meta-data

android:name="android.appwidget.provider"

android:resource="@xml/appwidget_info" /></receiver>



<service android:name=".RequestService"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值