Java – hosting widgets in the Android launcher
•
Java
I'm making an Android launcher and I'm stuck in the widget section I've been searching the Internet for about an hour and a half to know how to host widgets in my application, but I'm not lucky
I have experienced some stock issuers and ADW transmitter codes, but only a few miles of codes. This is the first time I have made a transmitter
Can someone guide me on how to add widgets to my launcher? Or at least publish any links / tutorials? Please forgive me, because this is my first time
Solution
Try this:
final int APPWIDGET_HOST_ID = 2048;
final int REQUEST_PICK_APPWIDGET = 0;
final int REQUEST_CREATE_APPWIDGET = 5;
AppWidgetManager appWidgetManager;
AppWidgetHost appWidgetHost;
// Let user pick a widget from the list of intalled AppWidgets
public void selectWidget()
{
int appWidgetId = this.appWidgetHost.allocateAppWidgetId();
Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetId);
addEmptyData(pickIntent);
startActivityForResult(pickIntent,REQUEST_PICK_APPWIDGET);
}
// For some reason you have to add this empty data,else it won't work
public void addEmptyData(Intent pickIntent)
{
ArrayList<appwidgetproviderInfo> customInfo =
new ArrayList<appwidgetproviderInfo>();
pickIntent.putParcelableArrayListExtra(
AppWidgetManager.EXTRA_CUSTOM_INFO,customInfo);
ArrayList<Bundle> customExtras = new ArrayList<Bundle>();
pickIntent.putParcelableArrayListExtra(
AppWidgetManager.EXTRA_CUSTOM_EXTRAS,customExtras);
};
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
if (resultCode == RESULT_OK ) {
if (requestCode == REQUEST_PICK_APPWIDGET) {
configureWidget(data);
}
else if (requestCode == REQUEST_CREATE_APPWIDGET) {
createWidget(data);
}
}
else if (resultCode == RESULT_CANCELED && data != null) {
int appWidgetId =
data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
if (appWidgetId != -1) {
appWidgetHost.deleteAppWidgetId(appWidgetId);
}
}
}
// Show configuration activity of the widget picked by the user
private void configureWidget(Intent data) {
Bundle extras = data.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
appwidgetproviderInfo appWidgetInfo =
appWidgetManager.getAppWidgetInfo(appWidgetId);
if (appWidgetInfo.configure != null) {
Intent intent =
new Intent(AppWidgetManager.ACTION_APPWIDGET_CONfigURE);
intent.setComponent(appWidgetInfo.configure);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetId);
startActivityForResult(intent,REQUEST_CREATE_APPWIDGET);
} else {
createWidget(data);
}
}
// Get an instance of the selected widget as a AppWidgetHostView
public void createWidget(Intent data) {
Bundle extras = data.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,-1);
appwidgetproviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId);
AppWidgetHostView hostView = appWidgetHost.createView(this,appWidgetId,appWidgetInfo);
hostView.setAppWidget(appWidgetId,appWidgetInfo);
// Add it on the layout you want
myLayout.addView(hostView);
}
// Call this when you want to remove one from your layout
public void removeWidget(AppWidgetHostView hostView) {
appWidgetHost.deleteAppWidgetId(hostView.getAppWidgetId());
// Remove from your layout
myLayout.removeView(hostView);
}
@Override
protected void onStart() {
super.onStart();
appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetHost = new AppWidgetHost(this,APPWIDGET_HOST_ID);
// Start listening to pending intents from the widgets
appWidgetHost.startListening();
}
@Override
protected void onStop() {
super.onStop();
appWidgetHost.stopListening();
}
You only need to select from the list of appwidgets installed on the device to call the selectwidget () method
This code is a modified version of the stock Android launcher
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
