3
我正在制作一个控制电话网络状态的应用程序(在2G/3G之间切换)。权限拒绝:getIntentSender():uid = 1001,(需要uid = 1000)
出于某种原因,我的应用程序使用sharedUserId =“android.uid.system”,但运行在手机上下文(即android:process =“com.android.phone”) 一切正常,直到我已经开始使用AlarmManager。
里面我服务的onCreate()(它在运行过程中的过程com.android.phone的上下文中),下面的函数给出了异常:
pi = PendingIntent.getBroadcast(this, 0, new Intent(this, AlarmReceiver.class), 0);
我得到这个错误:
E/AndroidRuntime(21289): Caused by: java.lang.SecurityException: Permission Denial: getIntentSender() from pid=21289, uid=1001, (need uid=1000) is not allowed to send as package com.net_toggle
AlarmReceiver是我的服务的私有类,它具有相同的上下文。
我在互联网和本网站当然搜索,但无法找到解决方案。
好啊好啊,请比分享您的代码可以帮助一些其他国家的人民! –
我怀疑问题是在BOOT_COMPLETED意图接收。因为问题存在于不一致的UID中,但我通过其他方式解决了问题。我侵入了ADT以访问所有隐藏的和内部的Android SDK功能。现在我不需要使用反射来获得Phone对象,而是直接使用函数和对象。因为我不再需要android.uid.system共享的UID,所以我将它改为android.uid.phone,我的应用程序现在在任何地方都有相同的UID,并且可以很好地与AlarmManager配合使用。 – Saar
这是如何将隐藏/内部Android SDK添加到Eclipse的指南:https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/ – Saar