[英]Calling an activity from Service passing String data
我想從Android中的服務調用活動A(並將一些字符串傳遞給它)。 該活動A依次使用startActivityForResult().
調用另一個活動B。 基本上,我希望我的服務等到獲得活動B的結果。 請給我一些關於如何實現此實現的想法(以及在意圖中設置哪個標志)?
服務內容 :
Intent intent = new Intent(getBaseContext(),ActivityA.class);
intent.putExtra("code",script);
intent.putExtra("type", type);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
活動A :
Intent intent = new Intent(this,ActivityB.class);
intent.putExtra("code",code);
intent.putExtra("type", type);
startActivityForResult(intent,REQUEST_CODE);
首先創建一個界面
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();
}
現在,在您的Service類的onStart()方法中,在調用活動之前編寫此行
ActA.setMyListener(this);
這樣就完成了,當從活動B調用到A的onActivityResult時,從A到Serivce可以監聽doActions()的重寫方法
這是代碼
第一個活動: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;
}
}
第二活動: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();
}
Serivce類: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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.