2012-03-20 17 views
0

私はアンドロイドソースを使用しています。私は、アプリケーションの1つからブロードキャストを送信しており、別のアプリケーションの(ランチャー)マニフェストにインテントフィルタを記載したように記述しています。Androidでブロードキャストを送信中に例外が発生する

<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 

誰かが、この問題が発生したときは、基本パッケージ構造からクラスへのパスのみを必要とする必要がある名前については、同じ

+0

クラスcom.android.launcher2.LauncherModelをインスタンス化できません。空のコンストラクタはありません。 LauncherModelコードを表示してください。 –

+0

[コードはこちら](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/2.2_r1.1/com/android /launcher2/LauncherModel.java#LauncherModel.onReceive%28android.content.Context%2Candroid.content.Intent%29) – user264953

答えて

1

ためのソリューションなぜ私に知らせてくださいすることができます。マニフェストタグの下にあるマニフェストにはパッケージ属性があります。これはあなたの基本パッケージになります。例:

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

また、あなたの受信機が必要になるようなシステムによってインスタンス化されているので:受信機がパッケージにあった場合

<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指定されたインテントが捕捉されると、システムとしての空のコンストラクタがonRecieve()メソッドを呼び出します。プログラム的に作成されBroadcastReceiverを作成する方法の

UPDATE

Here is an example(それはコードが含まれているとして、私の答えを探してください)。

+0

ありがとうございます。これをチェックして – user264953

+0

の更新を提案すると、私の質問に投稿した例外を取り除くのに役立ちます。空のコンストラクターだけで、私はこの問題を取り除くことができました。しかし残念ながら、私の問題はまだ解決されていません。空のコンストラクタを使用すると、このクラスで多数のオブジェクトが実行されるため、提案したように空のコンストラクタを使用すると、多数の副作用が発生します。私は0の副作用があるように、空のコンストラクタを使用せずにこの問題を取り除くことを好む。 – user264953

+0

まだ、私はあなたの解決策を受け入れているので、将来的に他の人たちを助けるかもしれません。しかし、誰かに空のコンストラクタを使わずに同じものの代替解を提案するように依頼してください。 – user264953

関連する問題