预期实现功能:在桌面上有一个按钮,点击进入主界面
1.创建布局 widget.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fl_id" android:orientation="vertical"> <Button android:id="@+id/tv" android:layout_width="100dp" android:layout_height="wrap_content" android:background="#444" android:text="clock" /> </FrameLayout>2.在res文件夹中创建xml文件夹,并且创建widget配置文widgetcofig.xml:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget" android:minHeight="140dp" android:minWidth="200dp" android:updatePeriodMillis="1000"> </appwidget-provider>3.之后创建继承自AppWidgetProvider的WidgetProvide类,实现事件的监听。
public class WidgetProvide extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); // intent.getExtras().getString(); } /** * freash widget to use * * @param context * @param appWidgetManager * @param appWidgetIds */ @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); ComponentName serviceName = new ComponentName(context, TimeService.class); RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget); Intent intent = new Intent(context, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ,PendingIntent.FLAG_UPDATE_CURRENT); rv.setOnClickPendingIntent(R.id.tv, pendingIntent); AppWidgetManager manager=AppWidgetManager.getInstance(context); ComponentName widget=new ComponentName(context, WidgetProvide.class); manager.updateAppWidget(widget, rv); } @Override public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); } /** * remove widget * * @param context * @param appWidgetIds */ @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); } /** * add to screen * * @param context */ @Override public void onEnabled(Context context) { super.onEnabled(context); // context.startService(new Intent(context, TimeService.class)); } /** * last widget be removed * * @param context */ @Override public void onDisabled(Context context) { super.onDisabled(context); // context.stopService(new Intent(context, TimeService.class)); } @Override public void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) { super.onRestored(context, oldWidgetIds, newWidgetIds); } }4.在接受界面实现:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (getIntent().getExtras()!=null){ String clock = getIntent().getExtras().getString("clock"); Toast.makeText(this, "test"+clock, Toast.LENGTH_SHORT).show(); } } }上面四个文件创建成功以后,进入清单文件,并且加入:
<receiver android:name=".WidgetProvide" android:label="clock"> <intent-filter> <action android:name="com.stackwidgetapp.DATA_FETCHED" /> <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="android.appwidget.action.APPWIDGET_DELETED" /> <action android:name="android.appwidget.action.APPWIDGET_DISABLED" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widgetcofig" /> </receiver>