2

更新

根据我下面的回答,我的直接问题得到了解决。我的环境(PC + 设备)不允许在 DEBUG 构建中自定义权限。

我确信几周前我能够很好地运行 DEBUG 构建 - 因此描述了“间歇性”错误。

更新 2

代码在其他开发人员的机器上同步出来,通过 Eclipse 在他的设备上以 DEBUG 模式正常工作。在我的设备上,它在他的机器上不起作用。

我的机器上的 DEBUG 构建也可以在其他设备上正常工作。

这让我怀疑我的设备是否出了问题?


我有自定义权限的间歇性“权限拒绝”问题Intents。它是代码在生产和工作中的一种,但有时在进行新构建时,它会停止工作。我之前只是靠运气修复它,通过重启(设备和电脑)、清理项目、卸载/重新安装、重复等过程......这是不可接受的。

据我所见,我正在为我Intents在我的应用程序中广播的自定义权限做所有正确的事情。但是 logcat 给了我以下常见的错误:

  • W/BroadcastQueue(389):权限拒绝:来自 com.test(pid=22030,uid=10002)的广播意图 { act=A_ACTION flg=0x10} 需要 A_PERMISSION,因为已注册接收器 BroadcastFilter{43918d50 u0 ReceiverList{4391cad8 22030 com.test /10002/u0 远程:430576d0}}

在 4.2.1 (Galaxy Nexus) 和 4.2.2 (Nexus 7) 上,或

  • W/ActivityManager(2002):权限拒绝:接收 Intent { act=A_ACTION flg=0x10 } 到 ProcessRecord{41a12748 31496:com.test/10115}(pid=31496,uid=10115)由于发件人 com.test( uid 10115)

在 4.0 (S2) 和 2.3.3 (Samsung Ace)。

即标准错误。


我的清单说:

<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.....

这些字符串被定义为(fwiw):

<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>

我的基本 APPLICATION 子类中有一个方法,用于进行广播:

public void sendBroadcast(Intent i)
{
    // hardcoded custom permission
    super.sendBroadcast(i, "A_PERMISSION");
}

BroadcastReceiver从这样的内部注册我的Fragment

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    // hardcoded custom permission
    MyApp.getInstance().registerReceiver(myReceiver, myFilter,
        "A_PERMISSION", null);
}

我不高兴地检查了以下相关问题:


我认为这涵盖了本网站上的类似问题。

我的问题是它间歇性但浪费了大量时间,即一些构建在所有手机上都可以工作,一些构建在所有手机上都失败。

我想知道这是否是其中一个框架(Android OS,或者可能是 Eclipse / Android SDK)中的问题。不幸的是,我的谷歌搜索只会让我找到常见解决方案的更常见问题。

4

1 回答 1

1

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

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

如上所述,com.test在 DEBUG 构建中被破坏了。但我注意到这com.runtest仍然有效。


脚步:

  1. 安装com.runtest以确认它正在工作
  2. 从我的设备上卸载了这两个应用程序
  3. 重命名com.runtestcom.test- 在 Eclipse 中(Android 工具...重命名应用程序包)
  4. 在我的设备上的 Eclipse 中调试了这个重命名的应用程序 - 它有效
  5. 删除了这个重命名的“假”com.test
  6. 在我的设备上调试了 Eclipse 中的原始com.test应用程序 - 它终于成功了!

因此,出于某种原因,用工作应用程序覆盖损坏的应用程序改变了一些东西,并修复了我的设备。

于 2013-04-02T09:02:06.863 回答