2011-09-28 34 views
2

我使用Launcher2 home screen作爲自定義主屏幕的基礎。 我想用默認的Widget定製Android主屏幕。如何在定製的Android主屏幕中添加默認的Widget?

但是,當我用這個例子,我得到這個錯誤:

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,但它仍然沒有工作,我的默認小部件仍下落不明。

有沒有人有任何想法可能是什麼問題?

回答

3

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); 
     } 
} 
+0

所以我不能在我的HomeScreen應用程序中添加默認控件? – user430926

+1

是的你可以,你只需要在Launcher.java中修改上面的方法 – HandlerExploit

+0

如何實現這個方法void addAppWidget(Intent data)。我在哪裏可以獲得意向數據,如果我想讓它顯示爲默認的部件,用戶不應選擇該部件。非常感謝。 – user430926