2010年8月11日水曜日

android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to bind to services

IntentReceiver から Serviceをbindすることは出来ない。

08-11 07:14:51.487: ERROR/AndroidRuntime(1614): Caused by: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to bind to services

Receiver call not allowed Exception <- レシーバはコールすることが出来ない例外
IntentReceiverコンポーネントがサービスにバインドすることはできません

AppWidgetはIntennt Receiverなので

onUpdate()メソッドの中で、

Intent serviceIntent = new Intent(IService.class.getName());
context.bindService(serviceIntent, conn, Context.BIND_AUTO_CREATE);

とすると例外が発生する。


BroadcastReceiverのドキュメントは、

If this BroadcastReceiver was launched through a tag, then the object is no longer alive after returning from this function.This means you should not perform any operations that return a result to you asynchronously -- in particular, for interacting with services, you should use startService(Intent) instead of bindService(Intent, ServiceConnection, int). If you wish to interact with a service that is already running, you can use peekService(Context, Intent).

とあります。


Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
IBind bind = peekService(context, serviceIntent);

としてみても、bindはNULLになります。

はてさてどうしたものか...

0 件のコメント:

コメントを投稿