WebView使用以及JS交互以及浏览器编写与高德导航

  • WebView使用以及JS交互以及浏览器编写
  • 高德导航(步行,骑行,驾车,货车)

WebView使用以及JS交互以及浏览器编写


浏览器编写

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>测试网页</title><script type="text/javascript">function  showAlert() {alert("网页函数被调用");}function callAndroid() {android.jsCall("网页调用android");}</script>
</head>
<body><h1>欢迎光临</h1><a onclick="javascript: callAndroid();">调用安卓</a>
</body>
</html>

布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ProgressBarandroid:id="@+id/progress"android:layout_width="match_parent"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_height="10dp"android:background="@drawable/progress"/><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/progress"android:id="@+id/webView"></WebView></RelativeLayout>

Activity

package com.example.utill13;import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private ProgressBar progress;private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);progress = (ProgressBar) findViewById(R.id.progress);webView = (WebView) findViewById(R.id.webView);WebSettings webSettings = webView.getSettings();webSettings.setJavaScriptEnabled(true);webView.setWebViewClient(new MywebViewClient());webView.setWebChromeClient(new MyChromeClient());webView.loadUrl("http://114.218.57.165:88/home.html");webView.addJavascriptInterface(new MyJsHandler(),"android");}public final class MyJsHandler{@JavascriptInterfacepublic void jsCall(String jsparam){Toast.makeText(MainActivity.this, "android 被点击", Toast.LENGTH_SHORT).show();}}public class MywebViewClient extends WebViewClient{}public class MyChromeClient extends WebChromeClient{@Overridepublic void onProgressChanged(WebView view, int newProgress) {super.onProgressChanged(view, newProgress);progress.setProgress(newProgress,true);if (newProgress == 0){progress.setVisibility(View.VISIBLE);}else {progress.setVisibility(View.GONE);}}}@Overrideprotected void onDestroy() {super.onDestroy();//释放if (webView!=null){webView.destroy();}}
}

高德导航(步行,骑行,驾车,货车)

依赖

//3D地图so及jarimplementation 'com.amap.api:3dmap:latest.integration'//定位功能implementation 'com.amap.api:location:latest.integration'//搜索功能implementation 'com.amap.api:search:latest.integration'

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.day14_navi"><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--允许程序打开网络套接字--><uses-permission android:name="android.permission.INTERNET" /><!--允许程序设置内置sd卡的写权限--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--允许程序获取网络状态--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--允许程序访问WiFi网络信息--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--允许程序读写手机状态和身份--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--允许程序访问CellID或WiFi热点来获取粗略的位置--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><meta-data android:name="com.amap.api.v2.apikey" android:value="key"></meta-data></application></manifest>

xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:orientation="horizontal"><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="3"android:orientation="vertical"><EditTextandroid:id="@+id/et_start"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:hint="请输入起始点"/><EditTextandroid:id="@+id/et_end"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:hint="请输入终点"/></LinearLayout><Buttonandroid:id="@+id/bt_navi"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="导航(驾车)"android:background="@drawable/button_item2"/></LinearLayout><com.amap.api.navi.AMapNaviViewandroid:id="@+id/navi_view"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="6"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="0.5"android:background="#1754EE31"><Buttonandroid:id="@+id/bt_wallk"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="步行"android:background="@drawable/button_item"android:layout_margin="5dp"/><Buttonandroid:id="@+id/bt_riding"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="骑行"android:background="@drawable/button_item"android:layout_margin="5dp"/><Buttonandroid:id="@+id/bt_car"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="货车"android:background="@drawable/button_item"android:layout_margin="5dp"/></LinearLayout></LinearLayout>

Activity

package com.example.day14_navi;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.AMapCalcRouteResult;
import com.amap.api.navi.model.AMapCarInfo;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapModelCross;
import com.amap.api.navi.model.AMapNaviCameraInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviRouteNotifyData;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AMapServiceAreaInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.autonavi.tbt.TrafficFacilityInfo;import java.util.ArrayList;public class MainActivity extends AppCompatActivity implements AMapNaviListener {private AMapNaviView mAMapNaviView;private AMapNavi mAMapNavi;ArrayList<NaviLatLng> sList = new ArrayList<>();NaviLatLng start = new NaviLatLng(39.906901,116.397972);ArrayList<NaviLatLng> eList = new ArrayList<>();NaviLatLng end = new NaviLatLng(39.906901,116.197972);Button bt_navi,bt_walk,bt_riding,bt_car;EditText et_start,et_end;boolean isint;//释放初始化成功@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);supportRequestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//获取 AMapNaviView 实例mAMapNaviView = (AMapNaviView) findViewById(R.id.navi_view);
//        mAMapNaviView.setAMapNaviViewListener(this);mAMapNaviView.onCreate(savedInstanceState);//导航mAMapNavi = AMapNavi.getInstance(this);mAMapNavi.addAMapNaviListener(this);//设置语言播放mAMapNavi.setUseInnerVoice(true);init();}private void init() {et_start = findViewById(R.id.et_start);et_end = findViewById(R.id.et_end);bt_navi = findViewById(R.id.bt_navi);bt_walk = findViewById(R.id.bt_wallk);bt_car = findViewById(R.id.bt_car);bt_riding = findViewById(R.id.bt_riding);//驾车bt_navi.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {search(0);}});//步行bt_walk.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {search(1);}});//骑行bt_riding.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {search(2);}});//货车bt_car.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {search(3);}});}private void search(int tag){if (isint){String start_str = et_start.getText().toString();String end_str = et_end.getText().toString();if (TextUtils.isEmpty(start_str)||TextUtils.isEmpty(end_str)){Toast.makeText(this, "不能为空", Toast.LENGTH_SHORT).show();}else {//计算经纬度poisearch(start_str,0,tag);poisearch(end_str,1,tag);}}else {Toast.makeText(this, "导航初始化失败", Toast.LENGTH_SHORT).show();}}private void poisearch(String keyword, final int type, final int tag) {//查询条件PoiSearch.Query query = new PoiSearch.Query(keyword, "", "");query.setPageNum(1);//设置页码query.setPageSize(1);//设置个数//Posisearch对象PoiSearch poiSearch = new PoiSearch(this, query);poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {@Overridepublic void onPoiSearched(PoiResult poiResult, int i) {if (poiResult!=null&&i==1000){ArrayList<PoiItem> pois = poiResult.getPois();PoiItem poiItem = pois.get(0);Log.d("jt", "维度: "+poiItem.getLatLonPoint().getLatitude());Log.d("jt", "经度: "+poiItem.getLatLonPoint().getLongitude());Log.d("jt", "title: "+poiItem.getTitle());Log.d("jt", "电话: "+poiItem.getTel());if (type == 0){start.setLatitude(poiItem.getLatLonPoint().getLatitude());start.setLongitude(poiItem.getLatLonPoint().getLongitude());sList.clear();sList.add(start);}else {end.setLatitude(poiItem.getLatLonPoint().getLatitude());end.setLongitude(poiItem.getLatLonPoint().getLongitude());eList.clear();eList.add(end);sList.add(start);eList.add(end);if (tag == 0){//驾车/* @congestion 躲避拥堵* @avoidhightspeed 不走高速* @cost 避免收费* @hightspeed 高速优先* @multipleroute 多路径* */int strategy = mAMapNavi.strategyConvert(true, false, false, false, false);mAMapNavi.calculateDriveRoute(sList, eList, null, strategy);}else if (tag == 1){//步行mAMapNavi.calculateWalkRoute(start,end);}else if (tag == 2){//骑行mAMapNavi.calculateRideRoute(start,end);}else if (tag == 3){//货车int strategy = mAMapNavi.strategyConvert(true, false, false, false, false);AMapCarInfo aMapCarInfo = new AMapCarInfo();aMapCarInfo.setCarType("1");//设置车辆类型,0小车,1货车aMapCarInfo.setCarNumber("京DFZ239");//设置车辆的车牌号码. 如:京DFZ239,京ABZ239aMapCarInfo.setVehicleSize("4");// 设置货车的等级aMapCarInfo.setVehicleLoad("100");//设置货车的总重,单位:吨。aMapCarInfo.setVehicleWeight("99");//设置货车的载重,单位:吨。aMapCarInfo.setVehicleLength("25");//  设置货车的最大长度,单位:米。aMapCarInfo.setVehicleWidth("2");//设置货车的最大宽度,单位:米。 如:1.8,1.5等等。aMapCarInfo.setVehicleHeight("4");//设置货车的高度,单位:米。aMapCarInfo.setVehicleAxis("6");//设置货车的轴数aMapCarInfo.setVehicleLoadSwitch(true);//设置车辆的载重是否参与算路aMapCarInfo.setRestriction(true);//设置是否躲避车辆限行。mAMapNavi.setCarInfo(aMapCarInfo);mAMapNavi.calculateDriveRoute(sList,eList,null,strategy);}}}}@Overridepublic void onPoiItemSearched(PoiItem poiItem, int i) {}});//发送查询请求poiSearch.searchPOIAsyn();}@Overrideprotected void onResume() {super.onResume();mAMapNaviView.onResume();}@Overrideprotected void onPause() {super.onPause();mAMapNaviView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mAMapNaviView.onDestroy();}@Overridepublic void onInitNaviFailure() {}//初始化成功@Overridepublic void onInitNaviSuccess() {isint = true;}@Overridepublic void onStartNavi(int i) {}@Overridepublic void onTrafficStatusUpdate() {}@Overridepublic void onLocationChange(AMapNaviLocation aMapNaviLocation) {}@Overridepublic void onGetNavigationText(int i, String s) {}@Overridepublic void onGetNavigationText(String s) {}@Overridepublic void onEndEmulatorNavi() {}@Overridepublic void onArriveDestination() {}@Overridepublic void onCalculateRouteFailure(int i) {}@Overridepublic void onReCalculateRouteForYaw() {}@Overridepublic void onReCalculateRouteForTrafficJam() {}@Overridepublic void onArrivedWayPoint(int i) {}@Overridepublic void onGpsOpenStatus(boolean b) {}@Overridepublic void onNaviInfoUpdate(NaviInfo naviInfo) {}@Overridepublic void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {}@Overridepublic void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {}@Overridepublic void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {}@Overridepublic void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {}@Overridepublic void showCross(AMapNaviCross aMapNaviCross) {}@Overridepublic void hideCross() {}@Overridepublic void showModeCross(AMapModelCross aMapModelCross) {}@Overridepublic void hideModeCross() {}@Overridepublic void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {}@Overridepublic void showLaneInfo(AMapLaneInfo aMapLaneInfo) {}@Overridepublic void hideLaneInfo() {}//计算成功@Overridepublic void onCalculateRouteSuccess(int[] ints) {//实时导航mAMapNavi.startNavi(NaviType.GPS);}@Overridepublic void notifyParallelRoad(int i) {}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {}@Overridepublic void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {}@Overridepublic void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {}@Overridepublic void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {}@Overridepublic void onPlayRing(int i) {}@Overridepublic void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {}@Overridepublic void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {}@Overridepublic void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {}
}

WebView使用以及JS交互以及浏览器编写与高德导航相关推荐

  1. Android Studio开发安卓app 安卓与webview中的js交互

    Android Studio开发安卓app 安卓与webview中的js交互 1.webview中的页面调用android中的方法 在Android Studio开发安卓app 封装WEB(H5,UR ...

  2. Android开发之Webview中原生与JS交互

    文章目录 概述 使用场景 交互方式 Java调用JS代码 JS调用Java代码 总结 概述 由于手机硬件资源的快速提升,使得采用混合开发的可能性逐渐成为现实并且流行起来.Android开发中最为简单的 ...

  3. webview与js交互

     对于android初学者应该都了解webView这个组件.之前我也是对其进行了一些简单的了解,但是在一个项目中不得不用webview的时候,发现了webview的强大之处,今天就分享一下使用we ...

  4. android webview 监听js,Android webview与js的数据交互

    项目要用到Webview和js交互,查了查以前的项目感觉还是有必要整理下的. 简单描述下项目中用到的地方,比如说在web页需要用到登录的地方点击登录跳转到APP原生登录界面去登录,点击web页的拨打电 ...

  5. android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  6. 移动开发周刊:Android ImageView正确使用、WebView与JS交互解析

    写在前面 从 2011 年创建首刊至今,移动开发周刊内容聚焦 Android.iOS.VR/AR 等前沿移动开发技术,精选一周最热点,解读开发技巧,从中希望能够让你有一些收获,如果你有好的文章以及优化 ...

  7. WebView---android webview组件如何使用 Webview与js交互

    浏览器控件是每个开发环境都具备的,这为马甲神功提供了用武之地,windows的有webbrowser,android和ios都有webview.只是其引擎不同,相对于微软的webbrowser,and ...

  8. Android开发-Android原生与WebView的js交互的实现

    前 言 一般在Android应用的开发过程中,一些核心的业务功能开发往往需要Android原生的开发,一些需要改动比较频繁的功能且不是核心的业务功能往往只需要在Android应用调用一个网页就行了.在 ...

  9. winform利用CefSharp调用google浏览器内核ChromiumWebBrowser,与JS交互

    一开始用了自带的webbrowser,不支持H5,脚本会有问题,后来又用了webkitBrowser,发现有些js效果还是显示不出来,和webbrowser稍微好一点,但是还是不行,然后决定用CefS ...

最新文章

  1. mysql ldap_OpenLDAP 使用MySQL作为数据库
  2. MySql The service could not be started
  3. 学python还是不会编程_你真的不学Python吗?学习Python的四大理由!
  4. 如何修改数据库表或存储过程的所有者
  5. 大数问题(C++、Java)
  6. LeetCode Smallest Range
  7. 程序员面试金典 - 面试题 16.24. 数对和(双指针/哈希map)
  8. 换行符‘/n’和回车符‘/r’ 区别
  9. [LeetCode] 234. Palindrome Linked List 回文链表
  10. Android 应用开发(36)---LinearLayout(线性布局)
  11. C 库函数 - abs()
  12. RubikFX:用JavaFX 3D解决魔方难题
  13. Windows Server AppFabric分布式缓存详解
  14. 与lwj问答之 C++中如何修改const变量
  15. iir滤波器的基本网络结构_(IIR)滤波器的基本结构-Read.ppt
  16. 量子混沌:相互作用如何影响量子多体系统的局域化?
  17. 前端面试技巧和注意事项_前端HR的面试套路,你懂几个?
  18. 为什么有些大公司技术弱爆了?
  19. 如何在vue页面中引入其他的子组件?(局部引入/全局引入)
  20. 关于做PDF的FAQ(一)~(四) 1

热门文章

  1. Java练习——学生宿舍管理系统Day10
  2. R数据可视化第三弹---ggplot2和REmap包绘制地图
  3. 窗口跑屏幕外面了怎么办
  4. 【书籍篇】统计数字会说谎
  5. jtextfield java_JTextField
  6. 2022年步道乐跑(最新版本)
  7. 原生JS实现电子书阅读器
  8. 时序预测 | MATLAB实现MA时间序列预测
  9. ARouter使用问题
  10. CSS3中width属性的width: calc(100% - 20px); 使用问题