【发布时间】:2014-11-10 16:02:28
【问题描述】:
我创建了一个测试 Android 启动器应用程序,并将其作为系统应用程序安装在有根设备上。目标是让应用程序将所有已安装的小部件放置在 viewpager 的片段上。这已成功完成;但是,每次显示新页面时都会向用户显示一条消息。
即使用户选中该框,每次添加小部件时仍会显示该消息。
我通常按照Hosting widgets in an android launcher 和Adding widgets to a launcher page without bindAppWidgetId() 中的步骤将小部件添加到应用程序。
首先我得到一个扩展应用程序的类中的小部件列表并将其存储在一个公共静态变量中
AppWidgetManager manager = AppWidgetManager.getInstance(this);
widgetList = manager.getInstalledProviders();
接下来我使用绑定意图来获取小部件
appWidgetManager = AppWidgetManager.getInstance(this.getActivity());
appWidgetHost = new AppWidgetHost(this.getActivity(), APPWIDGET_HOST_ID);
int id = appWidgetHost.allocateAppWidgetId();
Intent bindIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER,LauncherExperiment.widgetList.get(mParam1).provider);
startActivityForResult(bindIntent, REQUEST_BIND_APPWIDGET);
然后根据活动结果创建小部件
Bundle extras = data.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
AppWidgetProviderInfo appWidgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId);
AppWidgetHostView hostView = appWidgetHost.createView(this.getActivity(), appWidgetId, appWidgetInfo);
hostView.setAppWidget(appWidgetId, appWidgetInfo);
// Add it on the layout you want
myLayout.addView(hostView);
再次,我已通过更新清单将设备植根并安装为系统应用
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.launcherexperiment"
android:sharedUserId="android.uid.system" >
并按照此处的步骤操作: How can I sign my application with the system signature key?
所以综上所述,我已经能够成功的绑定应用并展示出来了;但问题是警告信息应该最多显示一次。
【问题讨论】: