0
我有一个应用程序A使用以下代码调用另一个应用程序B的Activity。如何将结果返回到调用活动
int request_code = 4;
Intent i = new Intent();
i.setClassName("name.of,packageB","class.name.of.packageB");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(i, request_code);
应用程序B中的目标活动已启动,此目标活动产生了另一项服务。
一旦此服务完成,我需要将结果返回给调用活动。
有什么方法比调用sendBroadcast(Intent)
我有一个不能正常工作下面的代码来做到这一点其他的。任何对此的帮助表示赞赏。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_activity_main);
String finish_activity="";
try{
Intent intent = getIntent();
if(intent!=null && intent.getExtras()!=null)
finish_activity = intent.getExtras().getString("finish_activity", "");
}catch(Exception e){
System.out.println(e.toString());
}
if(finish_activity.equals("")){
Intent intent = new Intent(this, Service.class);
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startService(intent);
} else{
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
Intent i = new Intent();
setResult(RESULT_OK,i);
finish();
}
}
我再次通过该服务调用此Activity以返回不起作用的结果。 服务代码调用我的目标活动。
Intent intent_finish = new Intent(context, TargetActivityName.class);
intent_finish.putExtra("finish_activity", "true");
intent_finish.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent_finish.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent_finish.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent_finish);
我没有在我的应用程序A中收到startActivityForResult的任何回调。任何帮助都非常感谢。
我的两个应用程序的完整代码。 应用程序A
public class AppA extends Activity {
private Button mOnBootBtn;
private Button mSettingsBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if((requestCode == 4)&& (resultCode==RESULT_OK)){
System.out.println("result code = "+requestCode);
}
};
public void simulate(View view){
if(view.getId() == R.id.invoke){
int request_code = 4;
Intent i = new Intent();
i.setClassName("com.example.AppB","com.example.AppB.Test");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(i, request_code);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
应用B - Test.java
public class Test extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_activity_main);
String finish_activity="";
try{
Intent intent = getIntent();
if(intent!=null && intent.getExtras()!=null)
finish_activity = intent.getExtras().getString("finish_activity", "");
}catch(Exception e){
System.out.println(e.toString());
}
if(finish_activity.equals("")){
Intent intent = new Intent(this, Service.class);
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startService(intent);
} else{
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
Intent i = new Intent();
setResult(RESULT_OK,i);
finish();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
}
}
应用B- Service.java
public class Service extends Service {
public static Context context;
public static Intent receivedIntent;
public static String calling_intent;
@Override
public void onStart(Intent intent1, int startId) {
// TODO Auto-generated method stub
super.onStart(intent1, startId);
System.out.println("Inside Service");
if (NetworkAvailable(context)) {
Intent intent_finish = new Intent(context, Test.class);
intent_finish.putExtra("finish_activity", "true");
intent_finish.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent_finish.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent_finish.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent_finish);
}
}else{
System.out.println("Inside service - No net");
}
}
@Override
public IBinder onBind(Intent receivedIntent) {
// TODO Auto-generated method stub
return null;
}
private static boolean NetworkAvailable(Context context) {
ConnectivityManager connectivityManager;
try{
connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}catch(Exception e){
System.out.println(e.toString());
return false;
}
}
}
在此先感谢。
您需要重写调用活动的方法:onActivityResult()。更多可以在这里找到(http://developer.android.com/training/basics/intents/result.html“活动结果的Android文档”) – Stunna
@Stunna:我在我的应用程序A中有onActivityResult()我没有收到回复。当我在Target应用程序完成后调试应用程序时,我期望将控制权转移到应用程序A,但应用程序A无法控制回来。我认为正在调用目标活动的服务正在接听电话。我的疑问是如何将这个结果返回到最初称为应用程序A –
对不起,但由于我没有看到你的代码,我只想确保你还包含@Override在onActivityResult的实现之上?任何方式发布你的方法实施? – Stunna