Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从android应用程序访问小部件_Java_Android_Widget - Fatal编程技术网

Java 从android应用程序访问小部件

Java 从android应用程序访问小部件,java,android,widget,Java,Android,Widget,我正在尝试将天气小部件添加到我的应用程序中。我使用以下代码查找目标天气小部件: public class widgetTask extends AsyncTask<Context, Void, AppWidgetHostView> { final static int APPWIDGET_HOST_ID = 1; final static String WEATHER_PACKEGE = "accuweather.android"; final static String WEATH

我正在尝试将天气小部件添加到我的应用程序中。我使用以下代码查找目标天气小部件:

public class widgetTask extends AsyncTask<Context, Void, AppWidgetHostView> {
final static int APPWIDGET_HOST_ID = 1;
final static String WEATHER_PACKEGE = "accuweather.android";
final static String WEATHER_CLASS = "accuweather.android.widgets.AL_WidgetProvider";

@Override
protected AppWidgetHostView doInBackground(Context... arg0) {
    AppWidgetHostView hostView = null;
    AppWidgetManager AWmanager = AppWidgetManager.getInstance(arg0[0]);
    AppWidgetHost AWHost = new AppWidgetHost(arg0[0], APPWIDGET_HOST_ID);
    AppWidgetProviderInfo AWProviderInfo = new AppWidgetProviderInfo();

    int AWId = AWHost.allocateAppWidgetId();

    List<AppWidgetProviderInfo> AWProviderInfos = new ArrayList<AppWidgetProviderInfo>();
    AWProviderInfos  = AWmanager.getInstalledProviders();

    for(int j = 0; j < AWProviderInfos.size(); j++)
    {

        if (AWProviderInfos.get(j).provider.getPackageName().equals("com."+WEATHER_PACKEGE) && AWProviderInfos.get(j).provider.getClassName().equals("com."+WEATHER_CLASS))
        {
            AWProviderInfo = AWProviderInfos.get(j);
            break;
        }
    }
    hostView = AWHost.createView(arg0[0], AWId, AWProviderInfo);
    hostView.setAppWidget(AWId, AWProviderInfo);

    return hostView;
}
它工作了,但小部件显示“下载天气数据”(授予此活动的互联网权限)并冻结,所以我无法与之交互。 您知道如何修复它并访问小部件函数吗?

不要在asynctask调用中使用get(),因为它将不再是异步的。doInBackground的结果将在onPostExecute中提供。在onPostExecute中调用LLWeather.addView

AppWidgetHostView weatherWidget = WT.execute(this).get();
LLWeather.addView(weatherWidget);