webview 打开 activity

调试了很久才搞通,分享给大家

功能介绍: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


demo下载

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用X5WebView打开OFD文件的示例代码: ```java // 导入必要的包 import android.os.Bundle; import android.view.ViewGroup; import android.widget.FrameLayout; import com.tencent.smtt.sdk.TbsReaderView; import com.tencent.smtt.sdk.WebView; public class MainActivity extends AppCompatActivity implements TbsReaderView.ReaderCallback { private TbsReaderView mTbsReaderView; private FrameLayout mFlContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化TbsReaderView mTbsReaderView = new TbsReaderView(this, this); // 获取容器 mFlContainer = findViewById(R.id.fl_container); // 将TbsReaderView添加到容器中 mFlContainer.addView(mTbsReaderView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); // 加载OFD文件 String filePath = "file:///android_asset/test.ofd"; Bundle bundle = new Bundle(); bundle.putString("filePath", filePath); bundle.putString("tempPath", getCacheDir().getPath()); boolean result = mTbsReaderView.preOpen(parseFormat("ofd"), false); if (result) { mTbsReaderView.openFile(bundle); } } @Override public void onCallBackAction(Integer integer, Object o, Object o1) { } @Override protected void onDestroy() { super.onDestroy(); // 销毁TbsReaderView mTbsReaderView.onStop(); } /** * 解析文件格式 * * @param fileName 文件名 * @return 文件格式 */ private String parseFormat(String fileName) { return fileName.substring(fileName.lastIndexOf(".") + 1); } } ``` 需要注意的是,使用X5WebView打开OFD文件需要使用TbsReaderView组件,并且需要在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ronindong

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值