预期功能
预期实现功能:在桌面上有一个按钮,点击进入主界面
实现步骤:
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>