Подтвердить что ты не робот

Android adb shell am broadcast: имя плохого компонента

Я пытаюсь "эмулировать" перезагрузку (или что-то еще с 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

манифеста:

<?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>
4b9b3361

Ответ 1

Вам нужно указать имя пакета перед именем класса (тогда вы можете записать его без пакета) следующим образом:

./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n net.fstab.checkit_android/.StartupReceiver

Практически получается, что вам просто нужно добавить косую черту после имени пакета.

Ты помог мне начать, я помог тебе закончить:)

Ответ 2

Широковещательная передача не требует указания какого-либо приемника. Этот случай, пожалуйста, просто ударьте

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

Надеюсь на эту помощь.

Ответ 3

Некоторые приложения могут ошибочно работать, если BOOT_COMPLETED принимается дважды, вместо этого ограничивайте трансляцию только в своем приложении:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.example.package

Ответ 4

Try

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" />