2011-03-02 16 views
42

Yeniden başlatmayı (ya da adb shell am ile başka bir şey) 'öykünmeye' çalışıyorum ve bileşenimi nasıl referans alacağımı anlayamıyorum. Sonra tekrar, belki bir bileşen tarafından ne anlama geldiğini anlamıyorum. Aşağıda ilk önce çalışmayan birkaç örnek komut, sonra tezahürüm var. StartupReceiver'ın 'telefon' başlatıldığında başarılı bir şekilde çağrıldığını unutmayın. Tam bir yeniden başlatma olmadan yeniden tetiklemek istiyorum.Android adb kabuk yayınlandı: Hatalı bileşen adı

Başarısız ADB komutları:

$ ./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 

Bildirim:

Böyle sınıf adı (o zaman paket olmadan yazmak olabilir) önce paketin adını belirtmek gerekir
<?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> 

cevap

76

:

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

Pratik olarak, paket adından sonra sadece eğik çizgi eklemeniz gerektiği ortaya çıkıyor.

Sen Bitirmene :)

+1

* grrr * orada atılmış rastgele bir eğik çizgi ile bir nokta ayrılmış hiyerarşi -

Ayrıca uygulamaya özel yayın intents'i alma izni kullandığından emin olun! * Boggle * ne olursa olsun, yazdığımmı yararlı bulduğuma ve bana yardım edebileceğine sevindim. Teşekkürler. – altendky

57

Broadcast her Alıcısı belirtmek gerektirmez yardımcı başlamamı sağladı. Bu durum, lütfen sadece felç

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

Umut bu yardım.

8

Bazı uygulamalar BOOT_COMPLETED iki kez alınırsa bunun yerine, yaramazlık sadece uygulamanıza yayını kısıtlayabilir:

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

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

(not deneyin -n net.fstab.checkit_android /.StartupReceiver) belirli bir alıcıya hedeflemek için. olurdu bu durumda

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

İlgili konular