通过scheme打开app


https://blog.csdn.net/u012246458/article/details/83787854

通过scheme打开app

  1. url:
1
lss://com.lss/app?x=web
  1. android
  • Manifest
1
2
3
4
5
6
7
8
9
10
11
12
<activity
android:name=".TestActivity"
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<!--scheme 允许在浏览器中打开-->
<category android:name="android.intent.category.BROWSABLE"/>
<!--scheme 相关信息配置-->
<data android:scheme="lss"
android:host="com.lss"/>
</intent-filter>
</activity>
  • activity 获取url参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class TestActivity extends AppCompatActivity {
private static final String TAG = "TestActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
Log.e(TAG, "scheme:" + intent.getScheme());
Uri uri = intent.getData();
Log.e(TAG, "scheme: " + uri.getScheme()); // 获取 scheme 名称
Log.e(TAG, "host: " + uri.getHost()); // 获取 scheme 的host
Log.e(TAG, "path: " + uri.getPath()); // 获取 scheme 的路径
Log.e(TAG, "queryString: "+ uri.getQuery()); // 获取 scheme 的参数,?后面的部分
Log.e(TAG, "queryParameter: " + uri.getQueryParameter("param")); // 获取 scheme 中的 param 参数
}
}
  1. 浏览器判断是否安装应用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var downloader, 
scheme = 'weixin://', // 需要打开的 scheme 地址
download='index'; // 如果打开scheme失效的app下载地址

// 给 id 为 open 的按钮添加点击事件处理函数
document.getElementById('open').onclick = function () {
window.location.href = scheme; // 尝试打开 scheme

// 设置3秒的定时下载任务,3秒之后下载app
downloader = setTimeout(function(){
window.location.href = download;
}, 3000);
};

document.addEventListener('visibilitychange webkitvisibilitychange', function () {
// 如果页面隐藏,推测打开scheme成功,清除下载任务
if (document.hidden || document.webkitHidden) {
clearTimeout(downloader);
}
});
window.addEventListener('pagehide', function() {
clearTimeout(downloader);
});
}