안녕하세요. 

안드로이드의  Launcher 소스를  분석중입니다.


여기서 위젯을  등록(?) 하는거 같은 코드가 있는데요.

원래 Launcher 의  소스로는 되지가 않아서,


AppWidgetManager  로  코드르 바꾸어서 테스트해 보았는데요.


java.lang.SecurityException:
bindGagetId appWidgetId=1000 provider=ComponentInfo{com.android.alarmclock/com.android.alarmclock.AnalogAppWidgetProvider}:
User 10024 does not have android.permission.BIND_APPWIDGET.


이런 에러가 나옵니다.



android.permission.BIND_APPWIDGET   권한은  어디에 주어야 하는 것인지요?


AndroidManifest.xml 에 

  <uses-permission android:name="android.permission.BIND_APPWIDGET" />

이것도 넣고,

 <provider
            android:name="LauncherProvider"
            android:authorities="soludens.andr.launcher.launcherprovider"
            android:writePermission="soludens.andr.launcher.permission.WRITE_SETTINGS"
            android:readPermission="soludens.andr.launcher.permission.READ_SETTINGS"
            android:permission="android.permission.BIND_APPWIDGET"/>

provider 옵션에도 넣었지만    동일한 에러가 나옵니다.



혹시  AppWidgetManager    사용법 예제 소스같은거  어디서 구할 수 없을 까요?

도움말만 보고,   아래와 같이  짜 보았는데  안되네요 ㅡ. ㅡ


final int[] bindSources = new int[] {
                    Favorites.ITEM_TYPE_WIDGET_CLOCK,
                    Favorites.ITEM_TYPE_WIDGET_PHOTO_FRAME,
            };

final ArrayList<ComponentName> bindTargets = new ArrayList<ComponentName>();
            bindTargets.add(new ComponentName("com.android.alarmclock",
                    "com.android.alarmclock.AnalogAppWidgetProvider"));
            bindTargets.add(new ComponentName("com.android.camera",
                    "com.android.camera.PhotoAppWidgetProvider"));


launchAppWidgetBinder(bindSources, bindTargets);


private void launchAppWidgetBinder(int[] bindSources, ArrayList<ComponentName> bindTargets) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext);
         
         for (int i = bindTargets.size() - 1 ; i >= 0; i--)
         {
          appWidgetManager.bindAppWidgetId(bindSources[i], bindTargets.get(i));
         }
}


감사합니다.