下面列出了android.appwidget.AppWidgetHostView#setAppWidget ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private AppWidgetHostView createWidgetFromId(int widget_id) {
AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(widget_id);
if (appWidgetInfo==null) {
return null;
}
// if (checkBindPermission(widget_id, appWidgetInfo.provider)) return null;
AppWidgetHostView hostView = getLoadedAppWidgetHostView(appWidgetInfo.provider);
if (hostView==null || hostView.getAppWidgetId()!=widget_id) {
// Create the host view
hostView = mAppWidgetHost.createView(mContext, widget_id, appWidgetInfo);
hostView.setAppWidget(widget_id, appWidgetInfo);
}
return hostView;
}
public void updateWidgetId(int oldId, int newId) {
AppWidgetProviderInfo provider = mAppWidgetManager.getAppWidgetInfo(newId);
AppWidgetHostView w = mLoadedWidgets.get(provider.provider);
if (w!=null) {
w.setAppWidget(newId, provider);
}
saveWidgetId(provider.provider, newId);
mAppWidgetHost.deleteAppWidgetId(oldId);
}
/**
* Adds a widget to the desktop.
*
* @param data Intent used to receive the ID of the widget being added.
*/
private void addWidget(Intent data, int index, boolean newWidget) {
int widgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
WIDGET_CONFIG_DEFAULT_CODE);
AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(widgetId);
AppWidgetHostView appWidgetHostView = appWidgetHost.createView(
requireActivity().getApplicationContext(),
widgetId, appWidgetInfo);
// Prevents crashing when the widget info can't be found.
// https://github.com/Neamar/KISS/commit/f81ae32ef5ff5c8befe0888e6ff818a41d8dedb4
if (appWidgetInfo == null) {
removeWidget(appWidgetHostView, widgetId);
} else {
// Notify widget of the available minimum space.
appWidgetHostView.setMinimumHeight(appWidgetInfo.minHeight);
appWidgetHostView.setAppWidget(widgetId, appWidgetInfo);
if (Utils.sdkIsAround(16)) {
appWidgetHostView.updateAppWidgetSize(null, appWidgetInfo.minWidth,
appWidgetInfo.minHeight, appWidgetInfo.minWidth, appWidgetInfo.minHeight);
}
// Remove existing widget if any and then add the new widget.
appWidgetContainer.addView(appWidgetHostView, index);
// Immediately listens for the widget.
appWidgetHost.startListening();
addWidgetActionListener(index);
registerForContextMenu(appWidgetContainer.getChildAt(index));
if (newWidget) {
// Update our list.
widgetsList.add(String.valueOf(widgetId));
// Apply preference changes.
PreferenceHelper.updateWidgets(widgetsList);
}
}
}
/**
* Adds a widget to the desktop.
*
* @param data Intent used to receive the ID of the widget being added.
*/
private void addWidget(Intent data, int index, boolean newWidget) {
int widgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
WIDGET_CONFIG_DEFAULT_CODE);
AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(widgetId);
AppWidgetHostView appWidgetHostView = appWidgetHost.createView(
requireActivity().getApplicationContext(),
widgetId, appWidgetInfo);
// Prevents crashing when the widget info can't be found.
// https://github.com/Neamar/KISS/commit/f81ae32ef5ff5c8befe0888e6ff818a41d8dedb4
if (appWidgetInfo == null) {
removeWidget(appWidgetHostView, widgetId);
} else {
// Notify widget of the available minimum space.
appWidgetHostView.setMinimumHeight(appWidgetInfo.minHeight);
appWidgetHostView.setAppWidget(widgetId, appWidgetInfo);
if (Utils.sdkIsAround(16)) {
appWidgetHostView.updateAppWidgetSize(null, appWidgetInfo.minWidth,
appWidgetInfo.minHeight, appWidgetInfo.minWidth, appWidgetInfo.minHeight);
}
// Remove existing widget if any and then add the new widget.
appWidgetContainer.addView(appWidgetHostView, index);
// Immediately listens for the widget.
appWidgetHost.startListening();
addWidgetActionListener(index);
registerForContextMenu(appWidgetContainer.getChildAt(index));
if (newWidget) {
// Update our list.
widgetsList.add(String.valueOf(widgetId));
// Apply preference changes.
PreferenceHelper.updateWidgets(widgetsList);
}
}
}
private AppWidgetHostView loadWidget(Activity parent, AppWidgetProviderInfo appWidgetInfo) {
// Allocate the hosted widget id
int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
if (checkBindPermission(parent, appWidgetId, appWidgetInfo)) return null;
Log.d(TAG, "Allowed to bind");
Log.d(TAG, "creating widget");
// Create the host view
AppWidgetHostView hostView = mAppWidgetHost.createView(mContext, appWidgetId, appWidgetInfo);
// Set the desired widget
hostView.setAppWidget(appWidgetId, appWidgetInfo);
return hostView;
}
private void addWidget(int appWidgetId, int cellId, boolean shouldSave) {
AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
final DashboardCell cellLayout = cells.get(cellId);
final AppWidgetHostView hostView = mAppWidgetHost.createView(context, appWidgetId, appWidgetInfo);
hostView.setAppWidget(appWidgetId, appWidgetInfo);
Bundle bundle = new Bundle();
bundle.putInt("cellId", cellId);
hostView.setTag(bundle);
cellLayout.findViewById(R.id.empty).setVisibility(View.GONE);
cellLayout.findViewById(R.id.placeholder).setVisibility(View.GONE);
cellLayout.setOnLongClickListener(olcl);
cellLayout.setOnGenericMotionListener(ogml);
cellLayout.setOnInterceptedLongPressListener(listener);
LinearLayout linearLayout = cellLayout.findViewById(R.id.dashboard);
linearLayout.addView(hostView);
Bundle bundle2 = (Bundle) cellLayout.getTag();
bundle2.putInt("appWidgetId", appWidgetId);
cellLayout.setTag(bundle2);
widgets.put(cellId, hostView);
if(shouldSave) {
SharedPreferences pref = U.getSharedPreferences(context);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("dashboard_widget_" + cellId, appWidgetId);
editor.putString("dashboard_widget_" + cellId + "_provider", appWidgetInfo.provider.flattenToString());
editor.remove("dashboard_widget_" + cellId + "_placeholder");
editor.apply();
}
new Handler().post(() -> {
ViewGroup.LayoutParams params = hostView.getLayoutParams();
params.width = cellLayout.getWidth();
params.height = cellLayout.getHeight();
hostView.setLayoutParams(params);
hostView.updateAppWidgetSize(null, cellLayout.getWidth(), cellLayout.getHeight(), cellLayout.getWidth(), cellLayout.getHeight());
});
}