我希望发送一个广播意图(即使有root权限),删除了一个应用程序,为此,我必须用附加内容广播一个意图。
我无法弄清楚我错过了什么,因为我找不到正确的方法。
我想我已经在Android上找到了操作系统广播意图的位置(该文件名为“PackageManagerService.java”)。我还发现了如何使用root获得正确的权限(并且它有效),以及如何使用“adb”工具将额外的数据放入广播的意图(链接here)。
现在我必须将所有部分放在一起。
到目前为止的代码是:
String packageOfCurrentApp=..., packageOfAppToReportAbout=... ;
try
{
final java.lang.Process p=
Runtime.getRuntime().exec(
String.format("su -c pm grant %s android.permission.BROADCAST_PACKAGE_REMOVED",packageOfCurrentApp));
final int res=p.waitFor();
Logger.log(LogLevel.DEBUG,"got permission:"+(res==0));
if(res==0)
{
final java.lang.Process p2=Runtime.getRuntime().exec(//
"am broadcast -a android.intent.action.PACKAGE_REMOVED "+//
"--ei android.intent.extra.UID -1 "+//
"-eez android.intent.extra.DATA_REMOVED true"+//
" -d com.syncme.syncmeapp ");
final int res2=p2.waitFor();
Logger.log(LogLevel.DEBUG,"broadcast?"+(res2==0));
}
}
catch(final Exception e)
{
Logger.log(LogLevel.DEBUG,"error:"+e);
}
许可有效,但广播没有。
代码有什么问题?缺什么?我该如何解决?
我还想知道如何通过shell(PC)来做同样的事情。
答案 0 :(得分:0)
喜欢电池: - 我们在下面使用 m broadcast“intent:#Intent; action = android.intent.action.BATTERY_CHANGED; i.status = 5; i.voltage = 4155; i.level = 100; end”
答案 1 :(得分:-1)
请参阅PackageManagerService.java的源代码
Bundle extras = new Bundle(1);
extras.putInt(Intent.EXTRA_UID, removedUid);
extras.putBoolean(Intent.EXTRA_DATA_REMOVED, false);
sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, removedPackage,
extras, null, null);