4

在为 Android 开发启动器(主屏幕)应用程序时,我遇到了一个我不明白的安全异常。

  • 从我的 Launcher Activity 中调用 [bindAppWidgetId()][1] 方法时,我得到了这个安全异常:

08-19 11:30:11.689: 错误/AndroidRuntime(6032): java.lang.SecurityException: bindGagetId appWidgetId=99 provider=ComponentInfo{com.android.music/com.android.music.MediaAppWidgetProvider}:用户 10034 没有android.permission.BIND_APPWIDGET。

我首先以为我忘记了清单中的 BIND_APPWIDGET 权限,但它确实存在。

android api 文档说明了这一点:

“您需要 APPWIDGET_LIST 权限。此方法将由 AppWidget 选择器使用。”

我尝试添加权限 android.permission.APPWIDGET_LIST,但它并没有解决问题。

另外,我从包含 AppWidgetPickActivity 代码的 android 源中查看了 Settings 应用程序的清单:有一条特殊的行要求共享用户 ID:

"android:sharedUserId="android.uid.system"

会不会和我的问题有关?

如果有人有想法那就太好了!

干杯,劳伦特

4

2 回答 2

6

我找到了答案!

BindAppWidgetId() 故意不可用于应用程序!(安全问题)。

“android.permission.BIND_APPWIDGET 权限是系统权限。只有当您的软件包作为系统软件包安装(安装在 /system/app 而不是 /data/app 中)或使用证书签署您的应用时,您才能获得该权限这和你的安卓镜像是一样的。所以基本上这意味着你只有在你的平台/手机上也是安卓镜像的创建者时才能使用这个权限。

以下是此信息的链接:

http://groups.google.com/group/android-developers/browse_thread/thread/231245ba6d1e690f/047b9d3f776d7e54?lnk=gst&q=bindAppWidgetId#047b9d3f776d7e54

http://groups.google.com/group/android-developers/browse_thread/thread/f24e0f484a79d529/ef84188e8533a125?lnk=gst&q=bindAppWidgetId#ef84188e8533a125

于 2010-08-27T08:47:51.500 回答
0

快速谷歌搜索显示这android.permission.APPWIDGET_LIST是一个可用的权限,即使它没有在 API 文档中列出。

于 2010-08-19T15:01:58.227 回答