サービスとアクティビティの設定の間で双方向の通信を確立しようとしています。これを行うには、通常どおりサービスを開始し、アクティビティでメッセンジャーにreplyToを設定してメッセージを送信し、サービスに送信します。そうすれば、双方向にメッセージを送信するためのリファレンスがあります。これが私のアクティビティの関連コードです:
private Messenger mService = null;
private final Messenger mMessenger = new Messenger(new IncomingHandler());
private ServiceConnection mConnection = new ServiceConnection()
{
public void onServiceConnected(ComponentName className, IBinder service)
{
mService = new Messenger(service);
mBound = true;
}
public void onServiceDisconnected(ComponentName className)
{
mService = null;
mBound = false;
}
};
private void initMessenger()
{
Message messageHandler = Message.obtain(null, NetworkService.MSG_GET_HANDLER, 0, 0);
messageHandler.replyTo = mMessenger; //Set the replyTo to give a reference
try
{
mService.send(messageHandler);
}
catch(RemoteException e)
{
e.printStackTrade();
}
catch(NullPointerException e)
{
e.printStackTrace(); //Why!!!
}
}
public void onCreate()
{
...
//Create the intent to start the network service
Intent iService = new Intent(this, NetworkService.class);
int[] connectionConfig = {CONNECTION_BT};
iService.putExtra(CONNECTION_CONFIG, connectionConfig);
bindService(iService, mConnection, Context.BIND_ABOVE_CLIENT);
startService(iService);
initMessenger();
}
mService.send()を呼び出そうとすると、NullPointerExceptionがスローされます。これは、その時点でmServiceがnullであることが原因である可能性があります。ボタンのOnClickListener内でinitMessenger()コードを移動すると、問題が発生します。サービスを開始してから一定時間待機して使用する必要がありますか?