本人第一次写博客,为了做个纪念,特此说明...
今天我来和大家分享下,怎样将AppWidget添加到界面上。
将AppWidget放到桌面上,需要两个必要参数ComponentName,AppWidgetId,拿到ComponentName我们一般直接可以使用ComponentName cn = new ComponentName(packageName, className);即可,这个我就不说的很详细了,第二步我们就的拿到一个AppWidgetId,怎样获得呢?在Launcher工程中就可以通过LauncherAppWidgetHost.java 这个类来得到,它是直接继承了AppWidget·Host类,使用它的方法mAppWidgetHost.allocateAppWidgetId()可以得到AppWidgetId,好了现在我们拿到了两个必要的参数,最后我们的通过方法AppWidgetManager.getInstance(this)拿到一个AppWidgetManager实例,并调用该实例的方法appWidgetManager.bindAppWidgetId(appWidgetId, cn);将两个参数绑定到一起即可,当然这还不够...具体做法参照以下代码.
ContentResolver cr = this.getContentResolver();
PackageManager packageManager = getPackageManager();
String packageName = packagename;
String className = classname;
boolean hasPackage = true;
ComponentName cn = new ComponentName(packageName, className);
try {
packageManager.getReceiverInfo(cn, 0);
} catch (Exception e) {
String[] packages = packageManager.currentToCanonicalPackageNames(
new String[] { packageName });
cn = new ComponentName(packages[0], className);
try {
packageManager.getReceiverInfo(cn, 0);
} catch (Exception e1) {
hasPackage = false;
}
}
if (hasPackage) {
int spanX = 2;
int spanY = 2;
}
ContentValues values = new ContentValues();
boolean allocatedAppWidgets = false;
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
try {
int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_APPWIDGET);
values.put(Favorites.SPANX, 2);
values.put(Favorites.SPANY, 2);
values.put(Favorites.APPWIDGET_ID, appWidgetId);
values.put(Favorites.CONTAINER, -100);
values.put(Favorites.CELLX, cellX);
values.put(Favorites.CELLY, cellY);
values.put(Favorites.SCREEN, 1);
cr.insert(LauncherSettings.Favorites.CONTENT_URI , values);
allocatedAppWidgets = true;
appWidgetManager.bindAppWidgetId(appWidgetId, cn);
} catch (RuntimeException ex) {
Log.e(TAG, "Problem allocating appWidgetId", ex);
}
return allocatedAppWidgets;
}