Android 14 AOSP widget 小组件 添加

  1.   首先自定义一个 extends  AppWidgetProvider 的xxxAppWidgetProvider,以下是详细实现步骤代码:


### 1. 创建自定义AppWidgetProvider类
```java
public class MyAppWidgetProvider extends AppWidgetProvider {
  @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        int[] ids = appWidgetManager.getAppWidgetIds(getComponentName(context));
        performUpdate(context, appWidgetManager, ids, 0);
    }   


 // 必须重写onUpdate方法
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManagerทย์int[] appWidgetIds) {
         int[] ids = appWidgetManager.getAppWidgetIds(getComponentName(context));       
 // 这里实现widget DIY更新逻辑
        performUpdate(context, appWidgetManager, ids, 0);
    }

private void performUpdate(Context context,
                               AppWidgetManager appWidgetManager, int[] appWidgetIds,
                               int level) {
        Log.d("zxsss", "level = " + level);
       
        for (int appWidgetId : appWidgetIds) {
            // 创建RemoteViews对象
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            
            // 设置点击事件等交互
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            views.setOnClickPendingIntent(R.id.widget_button, pendingIntent);
            
            // 更新UI
            views.setTextViewText(R.id.widget_text, "更新时间:" + new Date().toString());
            
            // 通知AppWidgetManager更新
            appWidgetManager.updateAppWidget(appWidgetId, views);
         
        }
}

    // 其他可重写方法
    @Override
    public void onEnabled(Context context) {
        // 当第一个widget实例被创建时调用
    }

    @Override
    public void onDisabled(Context context) {
        // 当最后一个widget实例被删除时调用
    }
    static ComponentName getComponentName(Context context) {
        return new ComponentName(context, TipsAppWidgetProvider.class);
    }
}

    2.在 AndroidManifest.xml 中声明

    
    
     ////声明注册widget 注意android 12 以后必须添加   android:exported
    <receiver android:name=".XXXAppWidgetProvider"
          android:exported="true"
        android:label="@string/appwidget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/xxx_appwidget_info" />
    </receiver>
     
    

    3.创建 widget 配置信息 XML(res/xml/xxx_appwidget_info.xml)
     

    
    
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:minWidth="294dp"
        android:minHeight="72dp"
        android:updatePeriodMillis="0"
        android:initialLayout="@layout/widget_layout"
        android:resizeMode="horizontal|vertical"
        android:widgetCategory="home_screen">
    </appwidget-provider>
    

    4.实现 widget 布局(res/layout/widget_layout.xml):

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/widget_background">
        
        <Button
            android:id="@+id/widget_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/widget_button_text"/>
        
        <TextView
            android:id="@+id/widget_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/widget_button"
            android:text="@string/widget_default_text"/>
    </RelativeLayout>
     
    

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值