意图自定义权限不起作用

3

更新

我的问题已经在下面的答案中得到解决。我的环境(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)的问题。不幸的是,我的搜索只能导向常见问题和通用解决方案。

1个回答

1

最终解决方案 - 我同意这似乎没有意义,但是这就是:

我有两个使用相同权限的应用程序 - com.testcom.runtest

如上所述,com.test 在DEBUG版本中出现了问题。 但是我注意到com.runtest 仍然可以正常工作。


步骤:

  1. 安装 com.runtest 以确认其是否正常工作
  2. 从我的设备中卸载了这两个应用程序
  3. 在Eclipse(Android Tools...重命名应用程序包)中将 com.runtest 重命名为 com.test
  4. 在我的设备上在Eclipse中调试此重命名的应用程序 - 它可以工作
  5. 删除此重命名的“假” com.test
  6. 在我的设备上在Eclipse中调试原始的 com.test 应用程序 - 最终它可以工作!

因为某种原因,用一个正常的应用程序覆盖损坏的应用程序改变了一些东西,并修复了我的设备。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接