从我的应用程序启动应用程序并获得打开第二个应用程序的响应

时间:2016-08-30 10:45:33

标签: android android-intent android-activity service

我尝试这种方式,但没有正确的方法来做到这一点。我正在使用此代码打开另一个应用程序。

现在我想知道什么时候我关闭或打开我的第二个应用程序然后我想得到一些结果关闭第二个应用程序或打开第二个应用程序到我的第一个应用程序。可能有或没有,如果有可能获得任何打开第二个应用程序或关闭第二个应用程序的响应。

Intent intentt = new Intent(Intent.ACTION_MAIN);
intentt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentt.setComponent(new ComponentName("com.example.abc","com.example.abc.MainActivity"));
startActivity(intentt);

这个代码打开我的第二个应用程序按下后退按钮我的第二个应用程序将在关闭时打开并打开第二个应用程序我想在第二个应用程序打开或关闭一些结果时得到一些结果,我也按照这些链接还

我也按照link来探索或找到解决方案

我怎么能这样做...先谢谢。

使用此代码我的第二个应用程序已打开,但在关闭第二个应用程序后,我如何找到或处理第二个应用程序的回调。

4 个答案:

答案 0 :(得分:0)

您应该使用 startActivityForResult()方法来打开或关闭第二个应用,因为我们将意图和请求代码作为参数传递,这有助于在 onActivityResult()中获得响应方法

答案 1 :(得分:0)

FirstApp使用SecondApp方法<{1}}致电startActivityForResult()

例如:

  intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setData(Uri.parse("market://details?id=" + "com.package.name"));

    startActivityForResult(intent, 2404);

当用户按下后退按钮时,它将在FirstApp的onActivityResult方法中通知。

使用 Intent 传递数据,然后在第二个App.Put中完成该活动,无论您的数据是putExtra。在第二个应用程序中写这个:

byte[] byteArray = stream.toByteArray();
            Intent intent = new Intent();
            intent.putExtra("tile", 1);
            intent.putExtra("image", byteArray);
            setResult(2404,intent);
            finish();

在FirstApp中编写以下代码。访问从第二个应用程序传递的结果

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 2404) {
        if (data != null)// To check for NullPointerException { 
            byte[] byteArray = data.getByteArrayExtra("image");
            Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
          //Your code 
        }
    }
}

有关详细信息,请查看此链接:

  1. StartActivity 2。StartActivityForResult 3。OnActivityResult

答案 2 :(得分:0)

尝试使用此代码将一个应用程序打开到另一个应用程序

Intent launchIntent = 
getPackageManager().getLaunchIntentForPackage("com.package.address");

if (launchIntent != null) { 
startActivity(launchIntent);//null pointer check in case package name 
 was not found
}

答案 3 :(得分:0)

尝试使用此代码检查应用是否正在运行

ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
for(int i = 0; i < procInfos.size(); i++)
{
    if(procInfos.get(i).processName.equals("com.android.maven")) 
    {
        Toast.makeText(getApplicationContext(), "YourApp is running", Toast.LENGTH_LONG).show();
    }
}

如果第二个应用程序在您的控制之下那么您可以startActivityForResult

SecondActivity中设置要返回FirstActivity的数据。如果您不想返回,请不要设置任何。

例如:在secondActivity中,如果要发回数据:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result); // this response code will be caught by the 1st activity 
setResult(Activity.RESULT_OK,returnIntent); 
finish();

如果您不想返回数据:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

现在,在FirstActivity类中,为onActivityResult()方法编写以下代码。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult