更新
我的问题已经在下面的答案中得到解决。我的环境(PC + 设备)不允许在DEBUG构建中使用自定义权限。
我确信几周前我能够正常运行DEBUG构建 - 因此出现了“间歇性”错误的描述。
更新2
代码在另一个开发者的机器上同步,通过Eclipse在他的设备上以DEBUG模式正常工作。但在我的设备上,从他的机器上无法工作。
此外,来自我的机器的DEBUG构建在这个其他设备上也可以正常工作。
这使我怀疑我的设备是否出了问题?
我有一个间歇性的“Permission Denial”问题,涉及自定义权限Intents
。它是那种在生产中代码可以正常工作,但有时在进行新的构建时会停止工作。我之前只能通过一些方法偶然修复它,例如重启(设备和电脑)、清除项目、卸载/重新安装、重复等等……这是不能接受的。
就我所知,我正在为我在应用程序中广播的自定义权限Intents
做正确的事情。但logcat给出了通常的错误提示:
- W/BroadcastQueue( 389): Permission Denial: broadcasting Intent { act=A_ACTION flg=0x10 } from com.test (pid=22030, uid=10002) requires A_PERMISSION due to registered receiver BroadcastFilter{43918d50 u0 ReceiverList{4391cad8 22030 com.test/10002/u0 remote:430576d0}}
在4.2.1(Galaxy Nexus)和4.2.2(Nexus 7)上,或者
- W/ActivityManager( 2002): Permission Denial: receiving Intent { act=A_ACTION flg=0x10 } to ProcessRecord{41a12748 31496:com.test/10115} (pid=31496, uid=10115) requires A_PERMISSION due to sender com.test (uid 10115)
在4.0(S2)和2.3.3(Samsung Ace)上。
即标准错误。
我的MANIFEST文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test"
android:versionCode="1"
android:versionName="4.10.0.3" >
<permission
android:name="A_PERMISSION"
android:description="@string/broadcast_permission_desc"
android:label="@string/broadcast_permission_label"
android:permissionGroup="@string/broadcast_permission_group"
android:protectionLevel="signature" />
<uses-permission android:name="A_PERMISSION" />
etc.....
这些字符串被定义为(仅供参考):
<string name="broadcast_permission_label">Private Broadcast</string>
<string name="broadcast_permission_desc">This permission allows the necessary components of the application to receive private broadcasts that are sent within the application.</string>
<string name="broadcast_permission_name">A_PERMISSION</string>
<string name="broadcast_permission_group">A_GROUP</string>
我在基础应用程序子类中有一个方法,我用它来进行广播:
public void sendBroadcast(Intent i)
{
// hardcoded custom permission
super.sendBroadcast(i, "A_PERMISSION");
}
我在Fragment
中这样注册我的BroadcastReceiver
:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// hardcoded custom permission
MyApp.getInstance().registerReceiver(myReceiver, myFilter,
"A_PERMISSION", null);
}
我已经检查了以下相关问题,但并没有解决我的问题:
我认为这些与该网站上的类似问题相符。
我的问题是,虽然有些版本可以在所有手机上运行,但某些版本会在所有手机上失败。这是一个间歇性的问题,但会浪费很多时间。
我想知道这是否是某个框架(Android OS或Eclipse/Android SDK)的问题。不幸的是,我的搜索只能导向常见问题和通用解决方案。