调试了很久才搞通,分享给大家
功能介绍:webview加载html,通过html打开activity,从而调起app。就是这么简单,上代码。
html代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="ztemp://ronindong?name=001&psw=lksj">启动Activity</a><br/>
</body>
</html>
MainActivity.java
/**
* @author ronindong
*
*/
public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
private WebView webView1;
private static final String URL = "file:///android_asset/a.html";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView1 = (WebView) findViewById(R.id.webView1);
/*
* a.html文件中的链接地址:ztemp://ronindong?name=001&psw=lksj
* 必须通过intent访问发出,不然会访问不到。
* ERR_UNKNOW_SCHEME 异常
*/
webView1.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("msg", "url=" + url);
Uri uri = Uri.parse(url);
String host = getResources().getString(R.string.host_);
String scheme = getResources().getString(R.string.scheme_);
if (uri.getScheme().equals(scheme)
&& uri.getHost().equals(host)) {
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return false;
} else {
view.loadUrl(url);
}
return true;
}
});
}
@Override
protected void onResume() {
super.onResume();
webView1.loadUrl(URL);
}
@Override
protected void onPause() {
super.onPause();
webView1.loadUrl(URL);
}
}
被调起activity:
SecActivity.java
/**
* @author ronindong
*
*/
public class SecActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sec);
//接受数据
Intent intent = getIntent();
Uri uri = intent.getData();
String scheme = uri.getScheme();
//拦截指定的scheme返回过来的数据
if (scheme.equals(getResources().getString(R.string.scheme_))) {
String name = uri.getQueryParameter("name");
String psw = uri.getQueryParameter("psw");
((TextView) findViewById(R.id.textView1))
.setText("【html】调起【activity】成功!\r\n 接受参数:[" + name + ":"
+ psw + "]");
} else {
((TextView) findViewById(R.id.textView1))
.setText("【html】调起【activity】失败!");
}
}
}
清单文件配置AndroidManifest.xml
<activity
android:name="com.ronindong.ztemp.SecActivity" >
<!-- 如果在别的应用程序中定义了,也是可以打开的,可以跨应用调起 -->
<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:host="@string/host_"
android:scheme="@string/scheme_" />
</intent-filter>
</activity>
运行不起来的同学,下载demo