AIDLファイルを使用して、あるアプリケーションAから別のアプリケーションBにデータを送信したい。私のアプリAは以下のようなものです、
public class LibValue {
public static native int intFromJNI(int n);
static {
System.loadLibrary("hello");
System.out.println("LibValue : Loading library");
}
JNIファイルから上記のクラスに値を取得しています。AIDLサービスを使用して別のアプリBを送信するための上記のクラスのデータは次のとおりです。
IEventService.aidl
interface IEventService {
int intFromJNI(in int n);
}
このために私はIEventImpl.javaクラスを書きました
public class IEventImpl extends IEventService.Stub{
int result;
@Override
public int intFromJNI(int n) throws RemoteException {
// TODO Auto-generated method stub
System.out.println("IEventImpl"+LibValue.intFromJNI(n));
return LibValue.intFromJNI(n);
}
}
上記のクラスにアクセスするには、以下のようなサービスクラスを作成します
パブリッククラスEventServiceはServiceを拡張します{
public IEventImpl iservice;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.i("EventService", "indside onBind");
return this.iservice;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
this.iservice = new IEventImpl();
Log.i("EventService", "indside OncREATE");
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
this.iservice = null;
super.onDestroy();
}
上記のクラスはすべてサーバー側です。以下のクラスは、データにアクセスするためのClient(app)クラスです。
public class EventClient extends Activity implements OnClickListener, ServiceConnection{
public IEventService myService;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_client);
button = (Button)findViewById(R.id.button1);
this.button.setOnClickListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (!super.bindService(new Intent(IEventService.class.getName()),
this, BIND_AUTO_CREATE)) {
Log.w("EventClient", "Failed to bind to service");
System.out.println("inside on resume");
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
super.unbindService(this);
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
this.myService = IEventService.Stub.asInterface(service);
Log.i("EventClient", "ServiceConnected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
Log.d("EventClient", "onServiceDisconnected()'ed to " + name);
// our IFibonacciService service is no longer connected
this.myService = null;
}
サービスクラスのデータにアクセスしようとしていますが、方法がわかりません。サービスからクライアントアプリケーションにデータにアクセスする方法を誰かに教えてもらえますか?
ありがとう