app唤起_app唤起微信公众号 - CSDN
精华内容
参与话题
  • 下文皆使用Client表示操作的App,Server表示需要被唤起的远端App,Server的包名为“com.jxx.server” 1. ComponentName 使用ComponentName唤起Server步骤很简单,需要注意的是Server的Activity需要在manifest配置种...

    下文皆使用Client表示操作的App,Server表示需要被唤起的远端App,Server的包名为“com.jxx.server”

    1. ComponentName

    使用ComponentName唤起Server步骤很简单,需要注意的是Server的Activity需要在manifest配置种设置exported为true

    Server的配置如下:

    <activity android:name="com.jxx.server.ServerActivity"
        android:exported="true"/>                                                          
    复制代码

    Client调用如下:

    Intent intent1 = new Intent();                                                                   
    ComponentName componentName = new ComponentName("com.jxx.server", "com.jxx.server.ServerActivity");
    intent1.setComponent(componentName);                                                             
    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
    startActivity(intent1);                                                                          
    复制代码

    Intent中添加ComponentName还有另外一种写法

    Intent intent2 = new Intent();                                                                   
    intent2.setClassName("jxx.com.server", "jxx.com.server.MainActivity");                                                             
    intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
    startActivity(intent1); 
    复制代码

    只不过setClassName内部帮我们new ComponentName的实例

    public @NonNull Intent setClassName(@NonNull String packageName, @NonNull String className) {
        mComponent = new ComponentName(packageName, className);
        return this;
    }
    复制代码

    既然是用Intent来唤起Activity,那就能使用Intent的特性,例如使用Bundle传递数据

    Intent intent1 = new Intent();                                                                   
    ComponentName componentName = new ComponentName("com.jxx.server", "com.jxx.server.ServerActivity");
    intent1.setComponent(componentName);   
    
    Bundle bundle1 = new Bundle();                     
    bundle1.putString("remote_invoke", "from_client"); 
    intent1.putExtras(bundle1);                        
                                                              
    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
    startActivity(intent1);
    复制代码

    在Server端提取数据也很简单

    Bundle bundle = getIntent().getExtras();
    复制代码

    2. 隐式跳转,Uri

    Android中唤起拨号页面是这样的

    Intent intent =  new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phoneNumber));
    startActivity(intent);
    复制代码

    其实就是用Uri的形式唤起Server,并传递数据,我们来自己实现一下。 这种方式下,Server端的配置如下,必须添加要有action、data以及category:

    <activity android:name=".SecondActivity">                              
                                                                           
        <intent-filter>                                                    
            <action android:name="com.jxx.server.ServerActivity" />
            <data                                                          
                android:host="com.jxx.server"                      
                android:scheme="ServerActivity" />                                 
            <category android:name="android.intent.category.DEFAULT" />    
        </intent-filter>                                                   
                                                                           
    </activity>                                                            
    复制代码

    Client调用:

    Intent intent2 = new Intent("com.jxx.server.ServerActivity");            
    Uri uri = Uri.parse("ServerActivity://com.jxx.server?remote_invoke=from_client");
    intent2.setData(uri);                                                            
    startActivity(intent2);                                                          
    复制代码

    我们看到uri中?后面还加了"remote_invoke=from_client",这其实是用来给Server传递数据用的,我们可以在Server中解析出来

    Uri uri = getIntent().getData();
    String from = uri.getQueryParameter("remote_invoke");
    //from = "from_client"
    复制代码

    这里还有一个需要注意的点是,如果Client在调用时没有指定Action,同时Server中又有多个Activity注册了相同的scheme和host,那么在页面跳转时,系统会弹框让我们选择跳转到哪个页面,如下图所示:

    3. 通过PackageManager唤起

    只需要知道Server的包名即可

    PackageManager packageManager = getPackageManager();                         
    Intent intent3 = packageManager.getLaunchIntentForPackage("com.jxx.server");
    if (intent3 != null) {                                                       
        startActivity(intent3);                                                  
    }                                                                            
    复制代码

    4. 静态广播接收者

    只需要Server端注册一个静态广播接收者,在广播接收者中跳转Activity即可,客户端只需要发送一个广播。

    Server定义广播接收者:

    public class ServerBroadCastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent intent1 = new Intent(context, MainActivity.class);
            //注意,这里必须要添加这个flag,
            //原因在于这里的context并不是一个Activity类型的context,无法直接开启activity
            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);
        }
    }
    复制代码

    并在manifest中注册为静态广播接收者,并定义action

    <receiver                                                       
        android:name=".ServerBroadCastReceiver"                     
        android:enabled="true"                                      
        android:exported="true">                                    
        <intent-filter>                                             
            <action android:name="server.ServerBroadCastReceiver" />
        </intent-filter>                                                                                              
    </receiver>                                                     
    复制代码

    Client中发送广播即可

    Intent intent4 = new Intent("server.ServerBroadCastReceiver"); 
    //这里加上componentName用于解决8.0以上不能唤起的问题                                     
    ComponentName componentName = new ComponentName("com.jxx.server", "com.jxx.server.ServerBroadCastReceiver");
    intent4.setComponent(componentName);                                                                        
    sendBroadcast(intent4);                                                                                     
    复制代码

    5. Service

    Android Service详解(二)中我们介绍了如何通过Service实现IPC通信,这当然也能用来唤起App,这里就不再过多介绍了,有兴趣的同学可以点击查看。

    转载于:https://juejin.im/post/5c91fde2f265da60ea145b80

    展开全文
  • 如果用户已经安装了APP就直接拉起APP直接进去游戏房间,如果没有就要跳转到下载页面。对于一个java小白来说,直接懵逼。又不会写页面,只好百度,各种查询。愣是搞了2天,才出来。直接贴源码,欢迎各位批评指导。&...
    公司是做游戏的,最近给了一个需求,游戏里面开房间,点击分享到微信后,微信用户点击该链接。如果用户已经安装了APP就直接拉起APP直接进去游戏房间,如果没有就要跳转到下载页面。

    对于一个java小白来说,直接懵逼。又不会写页面,只好百度,各种查询。愣是搞了2天,才出来。

    直接贴源码,欢迎各位批评指导。

    <!DOCTYPE html>
    <html style="height: 100%">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <style type="text/css">
               .wtips{
            	position:absolute;
            	left:0;
            	top:0;
            	background-color:rgba(0,0,0,0.65);
            	width:100%;
            	height:100%;
            	z-index:100;
            }
            .wtips img{
            	width:90%;
            	height:50%;
            	margin:1% 5%;
            }       
            </style>
    
        </head>
    <script type="text/javascript">
    var isAndroid;
    var isIOS;
    var id;
    
    function load(){
    	var ua = window.navigator.userAgent.toLowerCase();
    	var u = navigator.userAgent;
        isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
    	isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    	var micromessenger = ua.match(/MicroMessenger/i);
    	var weixin = micromessenger == 'micromessenger'?true:false;
    	// 判断是否是微信内置浏览器
    	if (weixin) {
    		var u = navigator.userAgent;
    	        isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
    		isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    	    if (isAndroid) {
    	       //这个是安卓操作系统
    	    	document.getElementById("tips_weix").src="./common/img/tips_weixin_android.png"
    	    }
    	    if (isIOS) {
    	  	//这个是ios操作系统
    	    }
    		document.getElementById("tipsdiv").style.display="";
    	}
    		// Safari 浏览器跳转IOS下载页
    		if(/webkit/i.test(ua) &&!(/chrome/i.test(ua) && /webkit/i.test(ua) && /mozilla/i.test(ua))){
    			
    			document.getElementById("down").href="苹果同事提供下载地址";
    		}
    	if(!weixin){
    		var src = window.location.href; 
    		var I = src.substr(src.indexOf("?id=") + 4).length; 
    		var T = src.indexOf("?id="); 
    		if (0 >= T) return ""; 
    		if (I == src.length) return -1; 
    		id = src.substr(src.indexOf("?id=") + 4); 
    		var test = document.getElementById("test");
    // 		alert("id =  "+id);  
    // 		test.href = "dfish://zy.app/openfish?roomid="+id;
    // 		alert("a标签的href : "+test.href);
    		test.οnclick=openApp("要监听的URL scheme协议");
    	}
    	
    }
    
    //判断手机上是否安装了app,如果安装直接打开,如果没安装,跳转到下载页面
    function openApp(url) { 
    	if(isAndroid){
    	    var timeout, t = 1000, hasApp = true;  
    	    var openScript = setTimeout(function () {  
    	        if (!hasApp) { 
    	        var durl = "安卓同事提供下载地址";
    	          window.location.href=durl; 
    	        }
    	        document.body.removeChild(ifr);  
    	    }, 2000)  
    	  
    	    var t1 = Date.now();  
    	    var ifr = document.createElement("iframe");  
    	    ifr.setAttribute('src', url);  
    	    ifr.setAttribute('style', 'display:none');  
    	    document.body.appendChild(ifr);  
    	    timeout = setTimeout(function () {  
    	         var t2 = Date.now();  
    	         if (!t1 || t2 - t1 < t + 100) {  
    	             hasApp = false; 
    	         }
    	    }, t);  
    	}
    	if(isIOS){
    		document.getElementById("test").href=url;
    		document.getElementById("test").click();
    	}
    	
    }
    
    
    </script>
    <body οnlοad="load()"  style="height: 100%" id="body">
        <a id='test' href="javascript:void(0);" style="display: none;" ></a>
        <a id='down' href="安卓下载的APK地址"  ><img height="100%" width="100%" src="./common/img/mahjong1.jpg"></a>
        <div id="tipsdiv" class="wtips" style="display: none">
    	       <img id="tips_weix" src="./common/img/tips_weixin_ios.png">
        </div>
    </body>
    </html>


    本来if(isIOS)里面的是和if(isAndroid)的一样,但是后面发觉不能直接拉起游戏的URL scheme协议。就问老大,老大也百度了一堆,说IOS9屏蔽了 iframe这个标签。所以只好就用一个最原始的方法。直接在a标签里面用href去跳转。

    如果用户没有安装APP,这个时候Safari页面会出一个改网址无效。如果安装了就能直接拉进房间。

    2天终于搞好了,实在不容易。

        

    展开全文
  • 关于h5唤起App的方式

    2019-11-15 08:55:29
    唤起 App 应该是很常见的问题了。我们在开发 H5 的时候,有一些链路上的功能在 H5 不支持,只能去 App 才能完成。比如,下单、支付等功能。那么在更多的场景能够唤起 App 就显得很重要了。 判断浏览器,动态加载...

    唤起 App 应该是很常见的问题了。我们在开发 H5 的时候,有一些链路上的功能在 H5 不支持,只能去 App 才能完成。比如,下单、支付等功能。那么在更多的场景能够唤起 App 就显得很重要了。

    1. 判断浏览器,动态加载对应浏览器的下载逻辑 

    2. 通过 universal linkURL Schemea 标签iframe 几种方式找出最适合这个浏览器的唤起方式。

    3. 如果下载了 App,就会走打开逻辑,如果没有下载则走下载逻辑。

    4. 如果已知不能唤起的浏览器引导其它浏览器打开

    各个唤起方法对比

    没有哪种方式是完美的,每种唤起方式都有它的优势跟劣势,只有将所有的唤起方法在不同浏览器上尝试过才能择优使用。

    通用链接(universal link)

    通用链接 universal link 是 IOS 9.0 版本以上才可以使用的新的特性。此特性类似于深层链接,并能够方便地通过打开一个 https 链接来直接启动您的客户端应用(手机有安装 App)。对比起以往所使用的 URL Scheme, 这种新特性在实现 web-app 的无缝链接时能够提供极佳的用户体验。

    体验一下通用链接

    我们可以来体验一下,左边的是通用链接 universal link方式,右边是 URL Scheme 方式。

    左边可以直接将 App 打开,而右边需要确认是否打开才可以。

     解决的bug:在 ios 12.3 版本之后,Safari 会有一个 bug,就是 URL Scheme 跟 download App 先后一起使用的话,会同时唤起 App 然后再进入 App store,体验极差。使用 universal link 可以完美解决这个问题。

    通用链接配置

    必须在根目录下或者 域名/.well-known 下面。注意 域名不要使用业务域名添加配置文件,必须要跨域使用,否则会会不能唤起App,直接打开页面。

    • 访问链接 我们假设有三个 App,分别是 appaappbappc,我们通过访问 https://jump.test.com/appa/index.html 就可以唤起 appa 了。

    • 配置下载页 如果没有安装 appa 的话就会跳转到 一个 404 页面,因为我们这个页面 https://jump.test.com/appa/index.html 其实并不存在,所以我们需要将这个页面在 nginx 代理到一个下载页面。

    • 疑问 那么你可能有一个疑问,我如果唤起来 app 之后这个页面会不会跳转到下载页呢?答案是不会的,如果唤起了 app 就不会继续跳转页面了,只有在唤不起来的时候才会进入下载页。

    apple-app-site-association 配置

    {
      "applinks": {
        "apps": [],
        "details": [
          {
            "appID": "ABCD.com.aaa.appa",
            "paths": ["appa/*"]
          },
          {
            "appID": "ABCD.com.aaa.appb",
            "paths": ["appb/*"]
          },
          {
            "appID": "ABCD.com.aaa.appc",
            "paths": ["appc/*"]
          },
          {
            "appID": "ABCD.com.aaa.*",
            "paths": ["*"]
          }
        ]
      }
    }

    通用链接的优缺点:

    • 优点:提供极佳的用户体验,使用起来也非常方便,解决了同时唤起 app 跟 app store 的问题

    • 缺点:只有在 ios 9 版本之上才能使用,个别浏览器不支持有兼容性问题

    URL Scheme 方式

    根据协议来判断是哪个 app 唤起。

    location.href = "testa://cainiaoqianduan.com";

    判断是否唤起 app

    因为唤起 app 并没有回调让我们知道唤起了 app,所以我们只能通过监听页面是否隐藏来实现判断是否唤起 app 的逻辑。当然这种做法还是有很大缺陷的,比如低端机型唤起速度很慢,高端机型要快得多,所以 delay 的时间要设置一个可以接受的值,我们暂时定的是 2500。还有如果用户没有安装 app,也会有 2500 的延时才能安装。

    const timer = setTimeout(() => {
      this.__download(options);
    }, options.delay);
    
    const visibilitychange = function() {
      const tag = document.hidden || document.webkitHidden;
      tag && clearTimeout(timer);
    };
    
    document.addEventListener("visibilitychange", visibilitychange, false);
    document.addEventListener("webkitvisibilitychange", visibilitychange, false);
    window.addEventListener(
      "pagehide",
      function() {
        clearTimeout(timer);
      },
      false
    );

    URL Scheme 的优缺点:

    • 优点 1. 兼容性好,大部分机型都能兼容 2. 使用方便

    • 缺点 1. 不能判断是否已经下载了 app,需要自己写逻辑判断 2. 用户体验不如通用链接的方式。

    a 标签跟 iframe 方式

    //a
    const a = document.createElement("a");
    a.setAttribute("href", __SCHEMA_PATH);
    a.click();
    
    
    //iframe
    const ifr = document.createElement("iframe");
    iframe.src = path;
    ifr.src = nativeUrl;
    ifr.style.cssText = "display:none;border:0;width:0;height:0;";
    document.body.appendChild(ifr);
    setTimeout(function() {
      document.body.removeChild(ifr);
    }, 1000);

    优缺点

     

    //微信 必须配置白名单,或者使用 universal link 也可以在 ios 唤起,表现形式有一点差别
    const wxconfig = {
      debug: false,
      appId: conf.appId, // 公众号的 appid
      timestamp: conf.timestamp,
      nonceStr: conf.noncestr,
      signature: conf.signature,
      beta: true,
      jsApiList: ["launchApplication", "getInstallState"]
    };
    (window.wx && window.wx.config(wxconfig)) || (window.wxconfig = wxconfig);
    
    
    
    //百度浏览器必须用 universal link 方式才能在 IOS 唤起
    //qq 在 ios 要使用 a 标签 的方式,即使通用链接的方式也不能将其唤起
    
    if (isIOS) {
      const a = document.createElement("a");
      a.setAttribute("href", __SCHEMA_PATH);
      return a.click();
    }
    location.href = __SCHEMA_PATH;
    
    //微博,测试京东跟淘宝都可以调起,猜测是设置了白名单,目前没有找到好的办法,只能引导到其它浏览器中打开

     

    目前只有微博不能唤起,其它都可以正常唤起

    场景 ios 安卓 是否需要配置白名单
    微信 ✔️ ✔️
    qq ✔️ ✔️
    chrome ✔️ ✔️
    小米 browser ✔️ ✔️
    uc ✔️ ✔️
    qq browser ✔️ ✔️
    360 browser ✔️ ✔️
    猎豹 ✔️ ✔️
    sogou ✔️ ✔️
    baidu browser ✔️ ✔️
    safari ✔️ ✔️
    微博 X X
    展开全文
  • 唤起APP

    2017-09-07 11:04:04
    var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appVersion; return { //移动终端浏览器版本信息 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
    var browser = {
        versions: function () {
            var u = navigator.userAgent, app = navigator.appVersion;
            return { //移动终端浏览器版本信息
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
                iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, //是否iPad
            };
        }(),
    }
    
    function CheckIsAndroid() {
        if (browser.versions.android){
            return true;
        }
        return false;
    }
    
    function CheckIsIOS() {
        if (browser.versions.iPhone || browser.versions.iPad || browser.versions.ios) {
            return true;
        }
        return false;
    }
    
    function isWeiXin(){
        var ua = window.navigator.userAgent.toLowerCase();
        if(ua.match(/MicroMessenger/i) == 'micromessenger'){
            return true;
        }
        return false;
    }
    
    // 唤起APP
    function arouseApp(){
    	if(isWeiXin()){
    		// 隐藏在线咨询按钮
            //$(".w_bottom").hide();
            alert("提示:请从外部浏览器打开此页面");
        }else if(CheckIsAndroid()){
            window.location.href = "newyan://newyan.com/?specialistTourId=${service.serviceId}";
            window.setTimeout(function(){
            	// 五秒内未唤起APP则跳转到下载页面
                window.location.href = "http://sj.qq.com/myapp/detail.htm?apkName=com.hrsb.newyan";
            }, 3000);
        }else if(CheckIsIOS()){
            window.location.href = "xinyan://specialistTourId=${service.serviceId}";
            window.setTimeout(function(){
            	// 五秒内未唤起APP则跳转到下载页面
            	window.location.href = "https://itunes.apple.com/app/id1208033893";
            }, 3000);
        }
    }

    展开全文
  • h5唤起app

    万次阅读 2016-08-21 22:01:21
    h5唤起app这种需求是常见的。在移动为王的时代,h5在app导流上发挥着重要的作用。 目前我们采用的唤起方式是url scheme(iOS,Android平台都支持),只需原生APP开发时注册scheme, 那么用户点击到此类链接时,会自动...
  • 手机浏览器唤起微信app支付说明

    万次阅读 多人点赞 2016-07-08 09:58:59
    微信支付官方文档并没有显示h5唤起微信app支付的文档,但是自微信6.0.2版本后已支持该功能,而且官方已经有了开发文档,只是没有显示出来。 微信h5支付文档地址: ...
  • 移动应用App唤起微信小程序

    万次阅读 2018-06-19 15:11:37
    写在前面的话:小编最早使用了友盟分享组件,其中友盟sdk又包含了微信的sdk。需求要求应用唤起微信小程序,但是微信小程序有...下面就是正式的跳转问题:1:移动应用App唤起微信小程序具体流程:登陆微信开放平台管...
  • h5分享到微信唤起app功能

    千次阅读 2019-01-04 10:17:38
    下面说一下,常见的微信唤起app功能。 先看下效果,我这找的以前的记录,因为我们线上已经改成分享唤起小程序了,大家将就看下吧。 废话我也不多说,都是自己以前踩过的坑,直接上代码吧。 1、在需要唤起的地方进行...
  • 手机网站支付唤起支付宝app

    万次阅读 2018-10-13 10:40:16
    若无法唤起支付宝客户端,则在一定的时间后会自动进入网页支付流程。 注意: 若接入的是新版本手机网站支付接口(alipay.trade.wap.pay),用户在安装支付宝钱包的情况下,调用手机网站支付接口默认会唤起钱包支付...
  • Android 唤起app的多种方式

    千次阅读 2017-12-26 15:12:22
    方式一(通过Intent唤起):我们自己的app代码:ComponentName componetName = new ComponentName( "com.lh.jimtrency.webviewdemo", "com.lh.jimtrency.webviewdemo.MainActivity"); //(另外一个应用程序的包名...
  • 解决android WebView无法唤起其他app

    千次阅读 2019-01-04 16:41:51
    这个广告会唤起taobao的app。测试发现应用内的webview无法唤起taobao的app。但是一些浏览器是可以。同时我发现不同的浏览器唤起app的提示也不一样,所以我猜测是可能各个浏览器自己做了处理的。后来查了下果真如此,...
  • 微信分享后点击分享唤醒app

    千次阅读 2015-08-26 18:21:48
    成功分享链接到朋友圈或 好友之后 点分享的链接会跳转到一个html页,这个网页的url是在写分享时传的值(如mWXModel.setUrl("http://hfgj.sinaapp.com/xxxx.html");) 在微信中要用浏览器打开是这样子 这个网页的...
  • &lt;a href="https://t.asczwa.com/taobao?backurl=打开淘宝需要显示的页面链接"&gt;淘宝&lt;/a&gt; 商品链接获取方法: 点击淘宝右上角,选择分享,点击复制链接,粘贴后里面就有... ...
  • H5页面唤起app

    千次阅读 2016-07-01 11:16:17
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • 在苹果Safari浏览器是无法通过iframe来唤起微信或支付宝APP支付的 但可以通过以下方法来完美解决iframe打开APP支付 1. 在iframe中的页面中JS代码: window.top.postMessage({ success: true, pay_url: pay_url }...
  • 背景最近在做微信、QQ、微博中使用js唤起App,之前也做过类似的功能,不过比较粗糙,考虑的情况不太全,而且那已经是很久之前的事情了,很多技术都已过时,现在有体验更好,功能更加完善的唤起技术,之前的很多的...
  • 点击按钮,当已经安装了app则调起,否则跳转到应用宝或者App store下载页面(普通浏览器兼容,微信有权限限制,只能每次跳转下载页) &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; ...
  • 如何在H5页面中唤起本地App(如果下载了App),没有下载的话直接跳转的相应的应用下载市场。
  • 短信或h5页面唤起android app

    千次阅读 2015-09-12 21:18:39
    android短信或h5页面唤起app需求 点击短信或h5内链接跳转:若androud手机安装了目标app则跳到该app某页面;若没安装则跳到app的html下载页 思路 通过scheme机制实现页面唤起。 实现 android app内页面scheme配置 ...
  • Android将后台应用唤起到前台的方法

    万次阅读 2015-11-06 14:16:37
    2 应用在后台,将后台进程唤起到前台,执行跳转操作; 3 应用没有启动,启动应用,执行跳转操作; 4 应用在后台被回收,恢复应用,然执行跳转操作。 目前以下几种方式能够实现上述效果: 1 通过设置Intent的flag...
1 2 3 4 5 ... 20
收藏数 8,674
精华内容 3,469
关键字:

app唤起