java - tutorial - Widgets de alojamiento en un lanzador de android
appwidgetprovider (1)
Prueba esto:
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();
}
Todo lo que tienes que hacer es llamar al método selectWidget()
cada vez que quieras mostrar una lista de AppWidgets instalados en el dispositivo para elegir.
Este código es una versión un poco modificada del programa de inicio de Android.
EDITAR :
Para enlazar ID de widget, es decir, hacer que los widgets se actualicen y responder a la interacción del usuario, consulte la solución aquí: Los widgets no responden cuando se vuelven a agregar a través del código.
Estoy haciendo un lanzador para Android, y estoy atrapado en la parte del widget. He estado buscando una hora y media en Internet tratando de descubrir cómo puedo alojar widgets en mi aplicación, pero no tuve suerte.
He revisado algunos lanzadores de stock y códigos de iniciador de ADW, pero ambos solo tienen kilómetros de código y esta es la primera vez que hago un lanzador.
¿Podría alguien guiarme por favor cómo puedo agregar widgets en mi lanzador? ¿O al menos publicar enlaces / tutoriales? Por favor explícalo ya que esta es mi primera vez.