Android打开其他App

背景:通过其他项目、网页链接打开自己的app

1、通过其他项目打开自己的app

其实就是通过隐式Intent打开Activity(为方便描述简称其他项目为:A,自己的app为:B)

首先B项目中activity设置intent-filter

<activity android:name=".ThridActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:scheme="market"
            android:host="com.trywang.jartest"
            android:path="/abc" />
    </intent-filter>
</activity>
到此为止B项目设置完成,只要在A中写上打开B的代码就可以了,代码如下:

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("market://com.trywang.jartest/abc?param=1234"));
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
上面 “market://com.trywang.jartest/abc”就是B项目中配置的 data标签至于后面带的“ ?param=1234"则是带的参数,多个参数使用“?param1=12&param2=34&param3=56”即可,参数可以在 ThridActivity中的onCreate()或者onStart()方法获取

不过在打开的代码中一般为了验证你要打开的Intent存在的话需要检查一下,否则你打开一个不存在的Intent则造成自己的程序崩溃。代码如下:

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("market://com.trywang.jartest/abc?abc=1234"));
intent.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
        PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
if (isIntentSafe) {
    startActivity(intent);
}

B项目中ThridActivity的onCreate()方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_thrid);
    TextView tv = (TextView) findViewById(R.id.tv);
    Intent intent = getIntent();
    Uri uri = intent.getData();
    if (uri != null) {
        String param = uri.getQueryParameter("param");//参数获取
    }
}

这样就可以。其实这些在官网上都有,其实我主要想mark一下在WebView中通过连接打开的方式。官网链接

2、通过在A中通过WebView打开B的ThridActivity

B中配置以上不变,只是在A中打开的代码少许更改。

webview.html关键代码:

<a href="market://com.trywang.jartest/abc?abc=1234">点击链接</a>
webview设置

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JsInterface(),"Android");
mWebView.setWebChromeClient(new WebChromeClient(){
});
//mWebView.setWebViewClient()
mWebView.loadUrl("file:///android_asset/webview.html");

2.1 不设置webview.setWebViewClient()则打开系统的浏览器,此时点击链接一样打开B的ThridActivity

2.2 设置webview.setWebViewClient()则只能通过他的重写方法shouldOverrideUrlLoading()方法进行跳转,如果不重写此方法进行跳转则无法跳转!

mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d(TAG, "shouldOverrideUrlLoading:1111 " + url);
        Intent intent = null;
        try {
            intent = Intent.parseUri(url,Intent.URI_INTENT_SCHEME);
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return false;
        }

        startActivity(intent);
        return true;
    }

});
主要看intent = Intent.parseUri(url,Intent.URI_INTENT_SCHEME)代码,将url路径转换为intent。此处只是简单的进行跳转处理,项目中根据自身情况进行逻辑重写。

同样在浏览器输入“market://com.trywang.jartest/abc也能打开,不过对浏览器有要求:好像只能系统浏览器或者google chrome的某些版本以上的才能打开,其他的浏览器打不开,如有好方法欢迎备注!

参考资料:

Create Deep Links to App Content

允许其他应用启动您的 Activity






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值