Android中一个APP启动另一个APP并传递参数

package com.ybs.demo_ybs;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getAppData();
    }

    private void getAppData() {

        Intent intent=getIntent();
        if(intent.getFlags()==101){
            String data_str = intent.getStringExtra("data");
            Log.i("tag", data_str);
            //tag: 调用者传递过来的数据

        }

    }

}

调用者APP: 
项目名字:Demo1 
项目包名:com.ybs.ymt 
调用者APP中传递数据:

package com.ybs.ymt;

import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;

public class MainActivity extends Activity {
    private String reqData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    private String setData() {
        reqData = "调用者传递过来的数据";
        return reqData;
    }
    //点击按钮后触发调用另一个APP
    public void onClcik(View view) {
        //要调用另一个APP的activity所在的包名
        String packageName = "com.ybs.demo_ybs";
        //要调用另一个APP的activity名字
        String activity = "com.ybs.demo_ybs.MainActivity";
        ComponentName component = new ComponentName(packageName, activity);
        Intent intent = new Intent();
        intent.setComponent(component);
        intent.setFlags(101);
        intent.putExtra("data", setData());
        startActivity(intent);
    }

}

方法2: 
被调用(启动)的APP: 
项目名字:Demo_ybs 
项目包名:com.ybs.demo_ybs 
被调用APP中获取调用者的传递数据:

package com.ybs.demo_ybs;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getAppData();
    }

    private void getAppData() {

        Intent intent=getIntent();
        if(intent.getFlags()==101){
            //String data_str = intent.getStringExtra("data");
            Bundle bundle=intent.getExtras();
            String data_str = bundle.getString("data");
            Log.i("tag", data_str);

        }

    }

    //点击按钮触发此事件
    public void onClick(View view){
        Intent data = new Intent();  
        //参数1:要调用另一个APP的activity所在的包名
        //参数2:要调用另一个APP的activity名字
        data.setClassName("com.ybs.ymt", "com.ybs.ymt.MainActivity");
        data.putExtra("return_data", "回传给调用者的数据");  
        setResult(10, data); //设置返回数据   
        this.finish(); //关闭当前Activity  
        Log.i("tag", "回传给调用者的数据");
    }


}

调用者APP: 
项目名字:Demo1 
项目包名:com.ybs.ymt 
调用者APP中传递数据:

package com.ybs.ymt;


import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.KeyguardManager;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager;

public class MainActivity extends Activity {
    private String reqData;
    private int IMPORTANCE_FOREGROUND=100;
    private int IMPORTANCE_VISIBLE=130;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }


    public void onClcik(View view) {


        /*
        //此方法也可以去启动另一个APP
        Intent intent = new Intent();

        intent.setComponent(new ComponentName("com.ybs.demo_ybs", "com.ybs.demo_ybs.MainActivity"));

        if (!isBackgroundRunning()) {
            intent.setAction("android.intent.action.MAIN");
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
        }

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

        intent.putExtra("data", "调用者传递过来的数据aaa");

        startActivity(intent);*/

        Intent intent = new Intent();
        intent.setFlags(101);
        Bundle bundle = new Bundle();
        bundle.putString("data", "调用者传递过来的数据aaa");
        intent.putExtras(bundle);
        //参数1:要调用另一个APP的activity所在的包名
        //参数2:要调用另一个APP的activity名字
        intent.setClassName("com.ybs.demo_ybs", "com.ybs.demo_ybs.MainActivity");
        startActivityForResult(intent, 1);

    }

    //在启动前进行一次判断:app是否在后台运行。一下是判断app是否运行的方法:
    private boolean isBackgroundRunning() {
        String processName = "com.ybs.demo_ybs";
        ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
        if (activityManager == null)
            return false;
        // get running application processes
        List<ActivityManager.RunningAppProcessInfo> processList = activityManager
                .getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo process : processList) {
             /* 
            BACKGROUND=400 EMPTY=500 FOREGROUND=100 
            GONE=1000 PERCEPTIBLE=130 SERVICE=300 ISIBLE=200 
             */  
            if (process.processName.startsWith(processName)) {
                boolean isBackground = process.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND
                        && process.importance != RunningAppProcessInfo.IMPORTANCE_VISIBLE;
                boolean isLockedState = keyguardManager
                        .inKeyguardRestrictedInputMode();
                if (isBackground || isLockedState)
                    return true;
                else
                    return false;
            }
        }
        return false;
    }


    //此方法中可以接收另一个app回传回来的数据
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i("tag", "onActivityResult1");
        if(resultCode == 10 && requestCode == 1){
            Log.i("tag", "onActivityResult2");

                String return_data=data.getStringExtra("return_data");

                Log.i("tag", "调用者返回的数据:" + return_data);

        }    
        super.onActivityResult(requestCode, resultCode, data);
    }

}
--------------------- 
作者:xiejunna 
来源:CSDN 
原文:https://blog.csdn.net/xiejunna/article/details/70159774 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/margin_0px/article/details/87928709