正在广播的Android adb shell:组件名称错误
我试图“模拟”重新启动(或其他任何与adb shell am
),我无法弄清楚如何引用我的组件。 再说一遍,也许我甚至不明白一个组件是什么意思。 下面我首先包括一些不起作用的示例命令,然后是我的清单。 请注意,“电话”启动时会成功调用StartupReceiver。 我只是想在没有完全重新启动的情况下重新触发它。
失败的ADB命令:
$ ./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n net.fstab.checkit_android.StartupReceiver <help snipped> Error: Bad component name: net.fstab.checkit_android.StartupReceiver $ ./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n .StartupReceiver <help snipped> Error: Bad component name: .StartupReceiver $ ./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n StartupReceiver <help snipped> Error: Bad component name: StartupReceiver
performance:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.fstab.checkit_android" android:installLocation="internalOnly" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BaseActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="BasePreferences" /> <activity android:name="EditActivity" /> <receiver android:name="StartupReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver> <receiver android:name="NotificationReceiver"> <intent-filter> <action android:name="net.fstab.checkit_android.NotificationReceiver" /> </intent-filter> </receiver> <service android:name="StartupService"> <intent-filter> <action android:name="net.fstab.checkit_android.StartupService" /> </intent-filter> </service> </application> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> </manifest>
你需要在类名之前指定包名(然后你可以在没有包的情况下编写),如下所示:
./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n net.fstab.checkit_android/.StartupReceiver
实际上,事实certificate,你只需要在包名后面加一个斜线即可。
你帮我开始了,我帮你完成了:)
广播不需要指定任何接收器。 这种情况下,请中风
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
希望这个帮助。
如果BOOT_COMPLETED收到两次,则某些应用程序可能会出现问题,而将广播限制在您的应用程序中:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.example.package
尝试
adb shell am broadcast \ -a android.intent.action.BOOT_COMPLETED \ -n net.fstab.checkit_android/.StartupReceiver
(注意-n net.fstab.checkit_android / .StartupReceiver )瞄准一个特定的接收器。
另外请确保您的应用程序使用权限来接收特定的广播意图 – 在这种情况下,将是
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />