最終更新: moonlight_aska 2013年08月05日(月) 00:00:33履歴
サービスにインタフェースを実装するには, AIDL(Android Interface Definition Language)を利用する.
サービスに関してはバインドでサービスを起動/停止する参照.
- TestService.java
- IMyServiceの機能を実装する.
package com.moonlight_aska.android.service03;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class TestService extends Service {
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return mService;
}
// インタフェースの実装
private final IMyService.Stub mService = new IMyService.Stub() {
public int add(int x, int y) throws RemoteException {
return x + y;
}
};
}
- IMyService.aidl
- AIDLファイルを作成し, サービスのインタフェースを定義する.
package com.moonlight_aska.android.service03;
interface IMyService {
int add(int x, int y);
}
- ServiceActivity.java
- サービスのインタフェースを呼び出す.
package com.moonlight_aska.android.service03;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ServiceActivity extends Activity implements View.OnClickListener {
private Button btn = null;
private IMyService mService = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_service);
btn = (Button)findViewById(R.id.service_btn);
btn.setOnClickListener(this);
// サービスの起動
Intent intent = new Intent(IMyService.class.getName());
bindService(intent, connect, BIND_AUTO_CREATE);
}
private ServiceConnection connect = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mService = IMyService.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mService = null;
}
};
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.service_btn) {
EditText input1 = (EditText)findViewById(R.id.input1_id);
EditText input2 = (EditText)findViewById(R.id.input2_id);
try {
// サービスに加算を実行させる
int res = mService.add(Integer.parseInt(input1.getText().toString()),
Integer.parseInt(input2.getText().toString()));
TextView ans = (TextView)findViewById(R.id.answer_id);
ans.setText(String.valueOf(res));
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
コメントをかく