2

WHAT I NEED

I'm developing a custom Android launcher for a company, which will be installed on this company's tablets and therefore won't be published on any store. It's basically a grid with widgets managed remotely (by a background service we're creating), which means that the app should decide which widgets to add or remove whenever the user opens it.

WHAT I HAVE

I'm using the following code to add the widgets:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getContext());
AppWidgetHost appWidgetHost = new AppWidgetHost(getContext(), APPWIDGET_HOST_ID);
appWidgetHost.startListening();

List<AppWidgetProviderInfo> appWidgetInfos appWidgetInfos = appWidgetManager.getInstalledProviders();

for(int j = 0; j < appWidgetInfos.size(); j++)
{
    if (appWidgetInfos.get(j).provider.getPackageName().equals(widgetPackage))
    {
        // Allocates an id
    int appWidgetId = appWidgetHost.allocateAppWidgetId();

    // Gets the app widget info
    AppWidgetProviderInfo appWidgetProviderInfo = appWidgetInfos.get(j);

    // Creates Widget
    AppWidgetHostView hostView = appWidgetHost.createView(getContext(), appWidgetId, appWidgetProviderInfo);
    hostView.setAppWidget(appWidgetId, appWidgetProviderInfo);

    // Insers the view to the layout grid
    insertView(row, column, rowspan, columnspan, hostView);

    //
    break;
    }
}

And it works just fine. The widget shows and it's buttons respond to user touch.

Here's one of the the widgets onUpdate:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int appWidgetId : appWidgetIds)
    {
        // Create an Intent to launch ExampleActivity
        Intent launchAppIntent = new Intent(context, MapActivity.class);
        PendingIntent launchApp = PendingIntent.getActivity(context, 0, launchAppIntent, 0);

        // Get the layout for the App Widget and attach an on-click listener
        // to the button
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        views.setOnClickPendingIntent(R.id.widget_layout, launchApp);

        // Tell the AppWidgetManager to perform an update on the current app widget
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

THE PROBLEM

One of the widgets (shown above) calls an Intent to start it's fullscreen Activity when clicked, and this doesn't work on my custom launcher, though it works perfectly on the default home launcher.

4

0 に答える 0