2015-08-20 27 views
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; 
} 


} 


} 

在此先感谢。

+0

您需要重写调用活动的方法:onActivityResult()。更多可以在这里找到(http://developer.android.com/training/basics/intents/result.html“活动结果的Android文档”) – Stunna

+0

@Stunna:我在我的应用程序A中有onActivityResult()我没有收到回复。当我在Target应用程序完成后调试应用程序时,我期望将控制权转移到应用程序A,但应用程序A无法控制回来。我认为正在调用目标活动的服务正在接听电话。我的疑问是如何将这个结果返回到最初称为应用程序A –

+0

对不起,但由于我没有看到你的代码,我只想确保你还包含@Override在onActivityResult的实现之上?任何方式发布你的方法实施? – Stunna

回答

0

我有点惊讶,你的编译器没有抱怨额外的分号。但是你的方法缺少你的@Override。您的整个方法签名应该如下所示:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if((requestCode == 4)&& (resultCode==RESULT_OK)){ 
      System.out.println("result code = "+requestCode); 
     } 
    } 
相关问题