使用adb通过附加功能广播意图

时间:2013-08-14 23:03:47

标签: android android-intent adb root broadcast

背景

我希望发送一个广播意图(即使有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)来做同样的事情。

2 个答案:

答案 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);