質問
私は次のように定義されたAIDLファイルを持っています
package com.erbedo.callalert;
interface RemoteCallAlert {
void notifyCallEnded();
}
サービスがあります:
package com.erbedo.callalert;
public class CallAlert extends Service {
Filter callListener;
private final RemoteCallAlert.Stub mBinder = new RemoteCallAlert.Stub() {
@Override
public void notifyCallEnded() throws RemoteException {
// TODO
}
};
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this, "CallAlert Created", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "CallAlert Destroyed", Toast.LENGTH_LONG).show();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Toast.makeText(this, "CallAlert Started", Toast.LENGTH_LONG).show();
callListener = new Filter();
TelephonyManager tm =
(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(this.callListener, PhoneStateListener.LISTEN_CALL_STATE);
}
public void callEnded() {
// TODO
}
}
とサービスにバインドしている活動は、次のとおりです。 パッケージcom.erbedo.callalert;
public class DummyStart extends Activity {
Filter callListener;
RemoteCallAlert mService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
Log.d("CONNECT","OK");
}
public void onServiceDisconnected(ComponentName className) {
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout l = new LinearLayout(this);
setContentView(l);
this.startService(new Intent(this, CallAlert.class));
}
}
はonServiceConnectedは呼び出されません。何かを明らかに行方不明アムI?
解決
startService()
はServiceConnection
を使用していません。 bindService()
います。
他のヒント
Intent intent = new Intent(CallAlert.class.getName());
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
サービスとの結合のためにはonServiceConnectedは呼び出されません。
あなたは()bindServiceを呼び出す必要があります。それは永続接続を提供し、onServiceConnected接続確立()が呼び出された後。
2点目: - あなたはAIDLのIPCメカニズムを使用している場合、私はあなたが2差分プロセス/アプリケーション間の通信が必要だと思います。ここでは、同じパッケージ内の両方のサービスとアクティビティ側で.aidlファイルの同じコピーを持っている必要があります。次に、あなたの活動の側に少し変更する必要があります..
あなたがここで見つけることができます。
所属していません StackOverflow