【问题标题】:How to add default Widget in customised Android Home Screen?如何在自定义 Android 主屏幕中添加默认小部件?
【发布时间】:2011-09-28 04:20:10
【问题描述】:

我使用Launcher2 home screen作为自定义主屏幕的基础。 我想用默认的 Widget 自定义 Android 主屏幕。

但是当我使用这个例子时,我得到了这个错误:

09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187): Problem allocating appWidgetId
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187): java.lang.SecurityException: bindGagetId appWidgetId=68 provider=ComponentInfo{com.android.protips/com.android.protips.ProtipWidget}: User 10081 does not have android.permission.BIND_APPWIDGET.
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at android.os.Parcel.readException(Parcel.java:1322)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at android.os.Parcel.readException(Parcel.java:1276)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.bindAppWidgetId(IAppWidgetService.java:470)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at android.appwidget.AppWidgetManager.bindAppWidgetId(AppWidgetManager.java:337)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherProvider$DatabaseHelper.addAppWidget(LauncherProvider.java:812)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherProvider$DatabaseHelper.addAppWidget(LauncherProvider.java:790)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherProvider$DatabaseHelper.loadFavorites(LauncherProvider.java:670)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherProvider$DatabaseHelper.onCreate(LauncherProvider.java:239)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherProvider.query(LauncherProvider.java:108)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at android.content.ContentProvider$Transport.query(ContentProvider.java:187)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at android.content.ContentResolver.query(ContentResolver.java:271)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherModel$Loader$LoaderThread.loadWorkspace(LauncherModel.java:711)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherModel$Loader$LoaderThread.loadAndBindWorkspace(LauncherModel.java:521)
09-28 12:03:13.052: ERROR/Launcher.LauncherProvider(9187):     at com.android.launcher2.LauncherModel$Loader$LoaderThread.run(LauncherModel.java:588)

我已经在清单中添加了android.permission.BIND_APPWIDGET,但它仍然无法正常工作,而且我的默认小部件仍然丢失。

有人知道可能是什么问题吗?

【问题讨论】:

    标签: android android-widget android-launcher


    【解决方案1】:

    android.permission.BIND_APPWIDGET 不适用于系统存储之外的应用程序。

    如果没有完整的堆栈跟踪,我无法确定错误的确切位置,但这是我所期望的导致问题的原因。

    void addAppWidget(Intent data) {
            int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
            AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
    
            if (appWidget.configure != null) {
                // Launch over to configure widget, if needed
                Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
                intent.setComponent(appWidget.configure);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    
                startActivityForResultSafely(intent, REQUEST_CREATE_APPWIDGET);
            } else {
                // Otherwise just add it
                onActivityResult(REQUEST_CREATE_APPWIDGET, Activity.RESULT_OK, data);
            }
    }
    

    【讨论】:

    • 所以我不能在我的 HomeScreen 应用中添加默认小部件??
    • 可以,只需要在Launcher.java中修改上述方法
    • 如何实现这个方法 void addAppWidget(Intent data)。如果我希望将小部件显示为默认值,我在哪里可以获得 Intent 数据,而用户不应该选择该小部件。非常感谢。
    • 您还可以通过在 /res/xml/default_workspace.xml 中使用小部件组件名称及其在工作空间信息中的位置来添加最喜欢的默认应用小部件、快捷方式、文件夹等在 LauncherProvider 中解析更新,并进行相应的绑定。
    • @HandlerExploit 你能建议我如何在主屏幕上为launcher3添加默认小部件,或者有任何参考请分享。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多