android 自定义webview 如何使用gps 如何用模拟的gps

1 如何fake gps ?

gps的fake 有个很奇怪的现象  你需要把fake gps的代码放到一个service当中 不知道是否是系统对发出fake信息的源进行了限定 目前实验结果是需要放在service

代码大致如下

package com.yiqiding.ktvbox.view.service;

import java.lang.reflect.Method;

import android.app.Service;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

import com.yiqiding.ktvbox.util.LogUtil;

public class GpsFakeService extends Service {
	private static final String LOG_TAG = "GpsFakeService";
	private float accuracy;
	private double altitude;
	private float bearing;
	private Bundle bl;
	private boolean forFlag = true;
	private Handler handler = new Handler();
	private double lat;
	private double lng;
	private LocationManager mLocationManager;
	private Runnable runnable = new Runnable() {
		public void run() {
			try {
				mLocationManager.sendExtraCommand("gps",
						"force_xtra_injection", bl);
				mLocationManager.sendExtraCommand("gps",
						"force_time_injection", bl);
				Location localLocation = getLoc("gps");
				mLocationManager.setTestProviderLocation("gps", localLocation);
				LogUtil.v("set localcation" + localLocation);
				handler.postDelayed(this, 1000L);
			} catch (Exception exception) {
				exception.printStackTrace();
			}
		}
	};

	private float speed;

	private Location getLoc(String paramString) {
		Location localLocation = new Location(paramString);
		localLocation.setLatitude(lat);
		localLocation.setLongitude(lng);
		localLocation.setAltitude(altitude);
		localLocation.setBearing(bearing);
		localLocation.setSpeed(speed);
		localLocation.setAccuracy(accuracy);
		localLocation.setTime(System.currentTimeMillis());
		try {
			Method method = Location.class.getMethod("makeComplete");
			if (method != null) {
				method.invoke(localLocation);
			}
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return localLocation;
	}

	private void removeProvider() {
		try {
			mLocationManager.removeTestProvider("gps");
		} catch (Exception exception) {
			Log.e(LOG_TAG, exception.getMessage());
		}
	}

	public IBinder onBind(Intent paramIntent) {
		return null;
	}

	public void onCreate() {
		super.onCreate();
	}

	public void onDestroy() {
		super.onDestroy();
		removeProvider();
		try {
			handler.removeCallbacks(runnable);
		} catch (Exception exception) {
			exception.printStackTrace();
		}
	}

	public void onStart(Intent paramIntent, int paramInt) {
		super.onStart(paramIntent, paramInt);
	}

	public int onStartCommand(Intent paramIntent, int paramInt1, int paramInt2) {
		LogUtil.i("will fetch locationManager then set location");
		mLocationManager = ((LocationManager) getSystemService("location"));
		mLocationManager.addTestProvider("gps", false, false, false,
				false, false, false, false, 0, 0);
		mLocationManager.setTestProviderEnabled("gps", true);
		bl = paramIntent.getExtras();
		if (bl != null) {
			if (bl.containsKey("lat"))
				lat = paramIntent.getDoubleExtra("lat", 0.0D);
			if (bl.containsKey("lng"))
				lng = paramIntent.getDoubleExtra("lng", 0.0D);
			if (bl.containsKey("accuracy"))
				accuracy = paramIntent.getFloatExtra("accuracy", 0.0F);
			handler.postDelayed(runnable, 100L);
		}
		return START_REDELIVER_INTENT;
	}
}

然后你只需要发送要fake的gps坐标给他

private void startTestGps(){
		LogUtil.i("will start gpsFakeService");
		Intent mIntent = new  Intent(this, GpsFakeService.class);
		mIntent.putExtra("lat", 31.12121245);
		mIntent.putExtra("lng", 121.124546461);
		mIntent.putExtra("accuracy", 5.0f);
		mIntent.putExtra("bearing", 0.0f);
		mIntent.putExtra("speed", 10.0f);
		startService(mIntent);
	}
	//结束时候要注意关闭fake服务
	private void endTestGps(){
		LogUtil.i("will stop gpsFakeService");
		Intent mIntent = new  Intent(this, GpsFakeService.class);
		stopService(mIntent);
	}

2 如何让自定义的webview能调用gps

WebView mWebView = (WebView) dacheViewRoot.findViewById(R.id.webView1);
		mWebView.getSettings().setJavaScriptEnabled(true);//启用支持javascript
		mWebView.getSettings().setDomStorageEnabled(true);//加这个是为了解决打开页面时候有解析报错问题
		mWebView.getSettings().setGeolocationEnabled(true);//支持geo
		mWebView.loadUrl("你的需要调用gps功能的网页");
		mWebView.setWebChromeClient(new WebChromeClient(){
			//加这个类似你在浏览器里面同意分享你的位置
			public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
				LogUtil.i("we allow geo location permission");
				callback.invoke(origin, true, false);
			}
		});

android 自定义webview 如何使用gps 如何用模拟的gps

时间: 2024-10-25 14:11:56

android 自定义webview 如何使用gps 如何用模拟的gps的相关文章

Android中Webview使用自定义的javascript进行回调

先说为什么需要讨论这个问题. 现在很多的手机应用,都可能会直接嵌入一个web页面.这样做的好处:一个是功能更新方便,维护起来容易,只需要维护服务器的页面即可,不需要更新客户端:另一个是功能通用,不仅android可以用,ios也可以用,symbian也可以直接用. 那为什么现在很多手机应用并不做成web方式的呢?原因很多.一个是现阶段web方式展现能力相对较弱,如果对于应用的美观程度要求比较高,就无法使用web方式:一个是web方式速度相对较慢,用户体验会受一些影响:一个是现阶段流量还是相对宝贵

Android中webView的基础使用(一)

WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: 1 <?xml version="1.0" encoding="utf-8"?> 2 <WebView xmlns:android="http://schemas.android.com/apk/res/android" 3 android:id="@+id

Android Internet - WebView 的使用

WebView是Android 提供的操作网页的一个组件.用于浏览网页及其他Internet资源.这里总结了一些WebView 的常用接口,和2个小示例程序用于自己开发时直接使用,就不用再去Baidu了,节省点时间. 使用loadUrl和loadData WebView.loadUrl:打开URL页面(本地或远端). WebView.goForward:实现浏览器的前进功能. WebView.goBack:实现浏览器的回退功能. WebView.loadData:加载HTML数据. 示例程序 1

Android 自定义View合集

自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/Mr-XiaoLiang 自定义控件三部曲 http://blog.csdn.net/harvic880925?viewmode=contents Android 从0开始自定义控件之View基础知识与概念 http://blog.csdn.net/airsaid/article/details/5

让Android的WebView支持html里面的文件上传

默认情况下,Android的webview是不支持<input type=file>的,点击没有任何反应,如果希望点击上传,弹出选择文件.图片的窗口,那就需要自定义一个WebChromeClient public class MyChromeClient extends WebChromeClient { public ValueCallback<Uri> UploadMsg; public ValueCallback<Uri[]> UploadMsg2; privat

Android在WebView上构建Web应用程序

原文链接:http://developer.android.com/guide/webapps/webview.html reference:http://developer.android.com/reference/android/webkit/WebView.html 如果你想实现一个Web应用(或仅仅是一个网页)作为你应用中的一部分,你可以使用WebView来实现它.WebView是Android的View类的扩展,它允许你显示一个网页作为Activity布局的一部分.它不包含成熟的浏览

Android中WebView的详细解释

Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化WebView组件: A.在Activity中实例化WebView组件.eg: WebView webView = new WebView(this); B.调用WebView的loadUrl()方法,设置WevView要显示的网页.eg: 互联网用:webView.loadUrl("http://

Android与WebView的同步和异步访问机制

大家都知道,通过WebView,我们可以在Android客户端,用Web开发的方式来开发我们的应用. 如果一个应用就是单纯一个WebView,所有的逻辑都只需要在网页上交互的话,那我们其实就只需要通过html和javascript来跟服务器交互就可以了. 但是很多情况下,我们的应用不是单纯一个WebView就可以了,有可能会需要运用到Android本身的应用,比如拍照,就需要调用Android本身的照像机等,要产生震动,在需要运用到手机特性的一些场景下,肯定需要这么一套机制在javascript

Android中webview跟JAVASCRIPT中的交互

在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之: 1 JAVASCRIPT脚本调用android程序    要在webview中,调用addJavascriptInterface(OBJ,interfacename) 其中,obj为和javascript通信的应用程序,interfacename为提供给JAVASCRIPT调用的 名称