经历2周多的时间 终于是完成了还算可以的android 整体案例了,分享下给大家 也希望自己有时间回过头来看看当初研究android的纠结心情。痛苦的经历是开发android 大部分都是在网上找解决方式 各种 错误 再接着找 解决方法 这个时候真的很蛋疼 现在终于能应用于项目了。
PS:我们的项目时 套壳 首页用android 的 其他都是html5 完成 这就需要 学习 交互的问题了 废话不多说了 也没别的 想发牢骚下 O(∩_∩)O~
导入 ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar
package com.example.user.testwap; import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.webkit.JavascriptInterface;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Toast; import org.json.JSONArray;import org.json.JSONObject; import java.util.List;import java.util.Timer;import java.util.TimerTask; import static android.net.Uri.*; public class MainActivity extends AppCompatActivity { WebView webview; private PersonService service; private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //实例化WebView对象 webview = new WebView(this); service =new PersonService(); //设置WebView属性,能够执行Javascript脚本 启用javascript支持 webview.getSettings().setJavaScriptEnabled(true); //启用 LocalStorage 支持 webview.getSettings().setDomStorageEnabled(true); String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); webview.getSettings().setAppCachePath(appCachePath); webview.getSettings().setAllowFileAccess(true); webview.getSettings().setAppCacheEnabled(true); //new类名,交互访问时使用的别名 webview.addJavascriptInterface(new JavaScriptInterface(), "demo"); //js弹出 webview.setWebChromeClient(new WebChromeClient()); try { //设置打开的页面地址 webview.loadUrl("http://192.168.16.39:8901/"); webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边 view.loadUrl(url); return true; } }); } catch(Exception ex) { ex.printStackTrace(); } setContentView(webview); }
public final class JavaScriptInterface { @JavascriptInterface public void getPersonList(){ mHandler.post(new Runnable() { public void run() { webview.loadUrl("javascript:wave()");//执行html布局文件中的javascript函数代码-- } catch (Exception e) { // TODO: handle exception } } }); } @JavascriptInterface public void postPay(String data) { String dd = data; } @JavascriptInterface public boolean onJsAlert(WebView view, String url, String message, JsResult result) { if (message.length() != 0) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("From JavaScript").setMessage(message).show(); result.cancel(); return true; } return false; } //打电话的方法 @JavascriptInterface public void call(String mobile){ Toast.makeText(MainActivity.this, mobile, Toast.LENGTH_LONG).show(); //Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ mobile)); //startActivity(intent); }}
@JavascriptInterface //必须加入这个注解 否则可能app 与 html 5 不能交互
html 页面<input type=‘button‘ onclick=‘window.demo.call("335623365")‘ value=‘app存值‘ /> // 可以调用到app 的 call 方法 <script type="text/javascript">
function wave() {
alert(123456);
}
</script>
html5 页面的js 放在哪自己安排 只要是html页面就行了 别放app里就好
最后加入权限在AndroidManifest.xml 页面
<!-- 联网权限 --><uses-permission android:name="android.permission.CALL_PHONE" /><uses-permission android:name="android.permission.INTERNET" /><!-- 读写权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 这个整体案例 集合了 localstorage 本地存储 app与html5 交互 弹窗
时间: 2024-10-13 12:56:37