Исключение при отправке трансляции в Android - PullRequest
0 голосов
/ 20 марта 2012

Я работаю с источником Android.Я отправляю широковещательную рассылку от одного из приложений и написал фильтр намерений для того же самого в манифесте другого приложения (Launcher), как показано.

<receiver
       android:name="com.android.launcher2.LauncherModel"
       android:enabled="true"
       android:exported="true">
       <intent-filter>
           <action android:name="com.abc.THEMECHANGED" />
       </intent-filter>
   </receiver>

Класс, расширяющий получатель, - это com.android.launcher2.LauncherModel.Я получаю следующее исключение в Launcher, когда происходит трансляция.

    01-01 00:01:45.101: WARN/dalvikvm(835): threadid=1: thread exiting with uncaught exception (group=0x40b131f8)
01-01 00:01:45.109: ERROR/AndroidRuntime(835): FATAL EXCEPTION: main
01-01 00:01:45.109: ERROR/AndroidRuntime(835): java.lang.RuntimeException: Unable to instantiate receiver com.android.launcher2.LauncherModel:               java.lang.InstantiationException: can't instantiate class com.android.launcher2.LauncherModel; no empty constructor
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2108)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.app.ActivityThread.access$1500(ActivityThread.java:125)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.os.Looper.loop(Looper.java:137)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.app.ActivityThread.main(ActivityThread.java:4368)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at java.lang.reflect.Method.invokeNative(Native Method)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at java.lang.reflect.Method.invoke(Method.java:511)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at dalvik.system.NativeStart.main(Native Method)
01-01 00:01:45.109: ERROR/AndroidRuntime(835): Caused by: java.lang.InstantiationException: can't instantiate class com.android.launcher2.LauncherModel; no empty  constructor
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at java.lang.Class.newInstanceImpl(Native Method)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at java.lang.Class.newInstance(Class.java:1319)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2103)
01-01 00:01:45.109: ERROR/AndroidRuntime(835):     ... 10 more

Может кто-нибудь, пожалуйста, дайте мне знать, почему это происходит, и решение для того же

1 Ответ

1 голос
/ 20 марта 2012

Для имени вам нужен только путь к классу из структуры базового пакета. В манифесте под тегом manifest должен быть атрибут пакета, это будет ваш базовый пакет. Пример:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jjnford.example"
    android:versionCode="1"
    android:versionName="@string/version" >

Так, если получатель был в пакете com.jjnford.example.lancher2, имя манифеста должно быть:

<receiver
    android:name=".launcher2.LauncherModel"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.abc.THEMECHANGED" />
    </intent-filter>
</receiver>

Кроме того, поскольку ваш получатель создается системой, вам необходим пустой конструктор, так как система вызовет ваш метод onRecieve (), когда ваше заданное намерение будет перехвачено.

UPDATE

Вот пример того, как создать BroadcastReceiver, который создается программно (ищите мой ответ, поскольку он содержит код).

...