最初にインターフェイスを作成します
public interface MyActions {
public void doActions();
}
次に、サービス クラスにそのインターフェイスを実装させます
public class MyService extends Service implements MyActions{
メソッドをオーバーライドします
@Override
public void doActions() {
//Some code
}
アクティビティ A が startActivityForResult メソッドを介して B を呼び出しているため、A の onActivityResult をオーバーライドします。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Some code
}
この A クラスで、インターフェイスの静的インスタンスを作成します
static MyActions mActions;
そして今、このような静的メソッドを書きます
public static void setMyListener(MyActions act){
mActions = act;
}
クラス A 用にオーバーライドした onActivityResult に、次のコード行を追加します。
mActions.doActions();
だからあなたは得る
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mActions.doActions();
}
onStart() メソッドの Service クラスで、アクティビティを呼び出す前にこの行を記述します。
ActA.setMyListener(this);
アクティビティ B から呼び出しが A の onActivityResult に行き、A からサービスが doActions() のオーバーライドされたメソッドをリッスンできる場合、これで完了です。
実行したいサービスの doActions() メソッドにすべてのコードを記述します
ここにコードがあります
1 番目のアクティビティ: ActA.java
public class ActA extends Activity {
static MyActions mActions;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.act1);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(ActA.this,ActB.class), 15);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("Response","requestCode" + requestCode + " resultCode" + resultCode);
mActions.doActions();
}
public static void setMyListener(MyActions act){
mActions = act;
}
}
2 番目のアクティビティ: ActB.java
public class ActB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.act2);
}
}
アプリ起動時の MainActivity
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Start the service
startService(new Intent(this, MyService.class));
}
}
インターフェース: MyActions.java
public interface MyActions {
public void doActions();
}
Service クラス: MyService.java
public class MyService extends Service implements MyActions{
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d("Response", "Started");
ActA.setMyListener(this);
startActivity(new Intent(this,ActA.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
@Override
public void doActions() {
Log.d("Response", "Listener working");
}
}