系统更新到Nexus 7后,ADB在启动服务时抛出SecurityException:“Caller uid = 2000无权与user = -2通信”

时间:2012-11-27 16:28:44

标签: android adb

我正在向Nexus 7平板电脑发出以下命令:

adb.exe -s 015d2109567231a0f shell am startservice -n com.packagename/.ExServiceName --ei port 59777

得到:

Starting service: Intent { cmp=com.packagename/.ExServiceName (has extras) }
java.lang.SecurityException: Caller uid=2000 is not privileged to communicate with user=-2
    at android.os.Parcel.readException(Parcel.java:1425)
    at android.os.Parcel.readException(Parcel.java:1379)
    at android.app.ActivityManagerProxy.startService(ActivityManagerNative.java:2648)
    at com.android.commands.am.Am.runStartService(Am.java:415)
    at com.android.commands.am.Am.run(Am.java:111)
    at com.android.commands.am.Am.main(Am.java:82)
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
    at dalvik.system.NativeStart.main(Native Method)

在我将系统更新应用到平板电脑之前,这一切都没有问题!

当前平板电脑信息:

Model number: Nexus 7
Android version: 4.2
Kernel version: 3.1.10-g22b4fcd

服务清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.packagename"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme">

        <service android:name=".ExServiceName" android:exported="true"></service>

    </application>

</manifest>

我正在Windows 7 x64

下开发

您能告诉我如何使服务成功接受意图而不会抛出任何异常吗?

谢谢,
康拉德

4 个答案:

答案 0 :(得分:24)

我在Galaxy Nexus上遇到了同样的例外,其版本是Android 4.2。

我成功通过以下命令启动服务。

am startservice --user 0 -a <action>

答案 1 :(得分:3)

经过大量搜索互联网和Koji Hisano的非常有用的帖子后,我设法让系统栏出现使用:

am startservice --user 0 -n com.android.systemui/.SystemUIService

如果使用-a选项,我收到一条消息:

错误:未找到;没有服务开始。

答案 2 :(得分:1)

您也可以通过以下方式在root手机上启动该服务:

adb.exe -s 015d2109567231a0f shell su -c "am startservice -n com.packagename/.ExServiceName --ei port 59777"

答案 3 :(得分:0)

对我有用的是:
打开Android Studio终端,然后

adb shell
run-as com.app_package_name
am startservice --user 0 -n com.app_package_name/.service_package_name.ServiceName