我正在尝试创建一个应用程序,该应用程序将在后台运行一个能够将触摸屏事件注入任何正在运行的活动的服务.我可以通过调用将事件注入到我的应用程序的一部分Activity中Instrumentation.sendPointerSync(motionEvent);但是如果我尝试在没有运行应用程序的活动的情况下执行此操作,则会收到权限错误,说我没有INJECT_EVENTS权限.我已将此权限添加到我的清单中,但是<uses-permission android:name="android.permission.INJECT_EVENTS"></uses-permission>它仍然会抛出相同的权限异常.经过一些搜索,我得到了答案,为了获得INJECT_EVENTS权限,您的应用必须使用与系统签名相同的签名进行签名.但我不清楚这究竟是什么意思.我将不得不找到一个自定义rom构建它并使用与该应用程序签名相同的签名对其进行签名.然后在我的设备上安装自定义ROM,然后安装我的应用程序,我将能够正确地注入触摸事件?如果是这样的话是我最好与已放在一起,就像一个自定义ROM开始从该页面或者是我要去的地方需要抢Android项目的git的副本,并建立整个事情的情况myslef?无论哪种方式,任何人都知道你可以指向我的地方,这会让我朝着正确的方向努力实现这一目标吗?
我正在尝试运行一些安全(内部)api调用,我显然得到了安全性异常:
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.provider.Telephony.SPN_STRINGS_UPDATED from pid=24864, uid=10107
Run Code Online (Sandbox Code Playgroud)
我试图从root运行相同的调用,但我不确定它是否可能在第一时间.我当然可以获得这样的root权限:
Process p = Runtime.getRuntime().exec("su");
Run Code Online (Sandbox Code Playgroud)
但它似乎没有做到这一点.我得到了相同的安全例外.我见过的其中一个示例试图先等待su呼叫完成,如下所示:
Process p = Runtime.getRuntime().exec("su");
p.waitFor();
Run Code Online (Sandbox Code Playgroud)
但这对我也没有帮助.那我做错了什么?有可能吗?
如果它很重要,我正在尝试使用PhoneFactory获取com.android.internal.telephony.Phone类的实例(使用反射获取它们).获得反射,它看起来像这样:
// Initialize the telephony framework
PhoneFactory.makeDefaultPhones(this);
// Get the default phone
Phone phone = PhoneFactory.getDefaultPhone();
Run Code Online (Sandbox Code Playgroud)