美文网首页
跨应用打开界面

跨应用打开界面

作者: _Youngjim | 来源:发表于2018-01-26 10:12 被阅读0次

A应用打开B应用

A应用manifeist.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.appkuajincheng"
   ......
    >

         .....
    <application
        ........ >
        <activity
            android:name=".MainActivity"
             >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".KtActivity"
             >
            <intent-filter >
                <data android:scheme="aaa" />
                </intent-filter>
        </activity>
    </application>

</manifest>

这里配置给.KTActivity的scheme是让B应用setresult可以返回来(这里实验了如果是startActivityForResult返回了只要这一个,不需要像B应用还需要action 或者category)

A应用界面代码:

public class KtActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kt);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                 Intent intent = new Intent("com.example.receiver2",Uri.parse("mdm://123"));
                 intent.putExtra("value", "abcdefg");
                 startActivityForResult(intent, 123);
                 
            }
        });
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        String stringExtra = data.getStringExtra("haha");
        Toast.makeText(this, stringExtra, Toast.LENGTH_SHORT).show();
    }
}

B应用manifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ex00"
   ........>

......

    <application
        ....>
        <activity
            android:name=".MainActivity"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SharedActivity"
            >
            <intent-filter>
///下面这三个缺一不可
                <action android:name="com.example.receiver2"></action>    
                <data android:scheme="mdm"></data>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

B界面代码

public class SharedActivity extends Activity {

    private Intent intent;

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

        if(getIntent().getData()!=null){
            String host = getIntent().getData().getHost();  //host为123
            String value = getIntent().getExtras().getString("value");
            Log.e("///"+host, value);
            Toast.makeText(getApplicationContext(), host+":"+value, Toast.LENGTH_LONG).show();
        }
        
        intent = new Intent("com.example.appkuajincheng.KtActivity",Uri.parse("aaa://"));
        intent.putExtra("haha", this.getLocalClassName());
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                setResult(111, intent);
                finish();
            }
        });
    }


}

需要注意:
1.即使B应用之前不存在于后台,在A点击后也会被拉起,这一点有点像推送。

2.你需要被跨进程打开的界面,不要是launch界面,不然会出错或者,甚至在桌面上都看不到应用图片

相关文章

网友评论

      本文标题:跨应用打开界面

      本文链接:https://www.haomeiwen.com/subject/fpbvaxtx.html