意图自定义权限不起作用

时间:2013-03-28 15:11:45

标签: android android-intent android-permissions

更新

根据我的回答,我的问题就解决了。我的环境(PC +设备)不允许在DEBUG构建中使用自定义权限。

我确信几周前我能够运行DEBUG版本 - 因此描述了“间歇性”错误。

更新2

代码在不同的开发人员的机器上同步,通过Eclipse在DEBUG模式下在他的设备上正常工作。在我的设备上,它无法在他的机器上运行。

此外,我机器上的DEBUG版本在其他设备上运行正常。

这让我质疑我的设备上是否出现了问题?


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

据我所知,我正在为我在我的应用中广播的Intents上的自定义权限做一切正确的事情。但是logcat给了我通常的错误:

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

on 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)需要A_PERMISSION,因为发件人com .test(uid 10115)

4.0(S2)& 2.3.3(三星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.....

这些STRINGS被定义为(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)中的问题。不幸的是,我的谷歌搜索只会让我找到常见解决方案中更常见的问题。

1 个答案:

答案 0 :(得分:1)

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

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

如上所述,DEBUG版本中com.test已被破坏。但我注意到com.runtest仍在工作。


步骤:

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

  7. 因此,出于某种原因,使用正在运行的应用程序覆盖损坏的应用程序会改变某些内容并修复我的设备。