提交 a199b39e 编写于 作者: N NeroZhang

1.9.5

上级 264561f3
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
android { android {
compileSdkVersion 27 compileSdkVersion 28
defaultConfig { defaultConfig {
applicationId "com.example.mockgps" applicationId "com.example.mockgps"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 27 targetSdkVersion 28
versionCode 1 versionCode 1
versionName "1.9.4" versionName "1.9.5"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
buildTypes { buildTypes {
...@@ -38,13 +38,17 @@ android { ...@@ -38,13 +38,17 @@ android {
dependencies { dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation files('libs/BaiduLBS_Android.jar') implementation files('libs/BaiduLBS_Android.jar')
implementation files('libs/library-1.0.19.jar') implementation files('libs/library-1.0.19.jar')
implementation 'com.android.support:cardview-v7:27.1.1' // implementation files('com.android.volley:volley:1.1.1')
implementation 'com.android.support:cardview-v7:28.0.0'
implementation files('libs/log4j-1.2.17.jar')
} }
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.9.4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.9.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file \ No newline at end of file
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</uses-permission> </uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission> </uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" > <uses-permission android:name="android.permission.FOREGROUND_SERVICE" >
</uses-permission> </uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission> </uses-permission>
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<service <service
android:name="com.baidu.location.f" android:name="com.baidu.location.f"
android:enabled="true" android:enabled="true"
......
package com.example.log4j;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Layout;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;
import android.util.Log;
/**
* 源自 android-logging-log4j-1.0.3.jar
*
* @author Administrator
*/
public class LogCatAppender extends AppenderSkeleton {
protected Layout tagLayout;
public LogCatAppender(Layout messageLayout, Layout tagLayout) {
this.tagLayout = tagLayout;
setLayout(messageLayout);
}
public LogCatAppender(Layout messageLayout) {
//这里定义的是Tag名称
this(messageLayout, new PatternLayout("%c"));
}
public LogCatAppender() {
this(new PatternLayout("%c"));
}
protected void append(LoggingEvent le) {
switch (le.getLevel().toInt()) {
case 5000:
if (le.getThrowableInformation() != null) {
Log.v(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.v(getTagLayout().format(le), getLayout().format(le));
}
break;
case 10000:
if (le.getThrowableInformation() != null) {
Log.d(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.d(getTagLayout().format(le), getLayout().format(le));
}
break;
case 20000:
if (le.getThrowableInformation() != null) {
Log.i(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.i(getTagLayout().format(le), getLayout().format(le));
}
break;
case 30000:
if (le.getThrowableInformation() != null) {
Log.w(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.w(getTagLayout().format(le), getLayout().format(le));
}
break;
case 40000:
if (le.getThrowableInformation() != null) {
Log.e(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else {
Log.e(getTagLayout().format(le), getLayout().format(le));
}
break;
case 50000:
if (le.getThrowableInformation() != null) {
Log.wtf(getTagLayout().format(le), getLayout().format(le), le.getThrowableInformation().getThrowable());
} else
Log.wtf(getTagLayout().format(le), getLayout().format(le));
break;
}
}
public void close() {
}
public boolean requiresLayout() {
return true;
}
public Layout getTagLayout() {
return this.tagLayout;
}
public void setTagLayout(Layout tagLayout) {
this.tagLayout = tagLayout;
}
}
package com.example.log4j;
import java.io.IOException;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.helpers.LogLog;
/**
* 源自 android-logging-log4j-1.0.3.jar
*
* @author Administrator
*/
public class LogConfig {
private Level rootLevel = Level.DEBUG;
/**
* ### log文件的格式
*
* ### 输出格式解释:
* ### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
*
* ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
* ### %c: 全类名
* ### %M: 调用的方法名称
* ### %F:%L 类名:行号(在控制台可以追踪代码)
* ### %n: 换行
* ### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
* ### %m: 日志信息
* ### 输出的信息大概如下:
* ### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
* ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
*/
private String filePattern = "[%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n";
/**
* ### LogCat控制台输出格式
*
* ### [Class: 信息所在的class.method(className:lineNumber)] 换行
* ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
*/
private String logCatPattern = "[Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n";
private String fileName = "android-log4j.log";
private int maxBackupSize = 5;
private long maxFileSize = 1024 * 1024 * 5L;
private boolean immediateFlush = true;
private boolean useLogCatAppender = true;
private boolean useFileAppender = true;
private boolean resetConfiguration = true;
private boolean internalDebugging = false;
public LogConfig() {
}
public LogConfig(String fileName) {
setFileName(fileName);
}
public LogConfig(String fileName, Level rootLevel) {
this(fileName);
setRootLevel(rootLevel);
}
public LogConfig(String fileName, Level rootLevel, String filePattern) {
this(fileName);
setRootLevel(rootLevel);
setFilePattern(filePattern);
}
public LogConfig(String fileName, int maxBackupSize, long maxFileSize, String filePattern, Level rootLevel) {
this(fileName, rootLevel, filePattern);
setMaxBackupSize(maxBackupSize);
setMaxFileSize(maxFileSize);
}
public void configure() {
Logger root = Logger.getRootLogger();
if (isResetConfiguration()) {
LogManager.getLoggerRepository().resetConfiguration();
}
LogLog.setInternalDebugging(isInternalDebugging());
if (isUseFileAppender()) {
configureFileAppender();
}
if (isUseLogCatAppender()) {
configureLogCatAppender();
}
root.setLevel(getRootLevel());
}
public void setLevel(String loggerName, Level level) {
Logger.getLogger(loggerName).setLevel(level);
}
private void configureFileAppender() {
Logger root = Logger.getRootLogger();
Layout fileLayout = new PatternLayout(getFilePattern());
RollingFileAppender rollingFileAppender;
try {
rollingFileAppender = new RollingFileAppender(fileLayout, getFileName());
} catch (IOException e) {
throw new RuntimeException("Exception configuring log system", e);
}
rollingFileAppender.setMaxBackupIndex(getMaxBackupSize());
rollingFileAppender.setMaximumFileSize(getMaxFileSize());
rollingFileAppender.setImmediateFlush(isImmediateFlush());
root.addAppender(rollingFileAppender);
}
private void configureLogCatAppender() {
Logger root = Logger.getRootLogger();
Layout logCatLayout = new PatternLayout(getLogCatPattern());
LogCatAppender logCatAppender = new LogCatAppender(logCatLayout);
root.addAppender(logCatAppender);
}
public Level getRootLevel() {
return this.rootLevel;
}
public void setRootLevel(Level level) {
this.rootLevel = level;
}
public String getFilePattern() {
return this.filePattern;
}
public void setFilePattern(String filePattern) {
this.filePattern = filePattern;
}
public String getLogCatPattern() {
return this.logCatPattern;
}
public void setLogCatPattern(String logCatPattern) {
this.logCatPattern = logCatPattern;
}
public String getFileName() {
return this.fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public int getMaxBackupSize() {
return this.maxBackupSize;
}
public void setMaxBackupSize(int maxBackupSize) {
this.maxBackupSize = maxBackupSize;
}
public long getMaxFileSize() {
return this.maxFileSize;
}
public void setMaxFileSize(long maxFileSize) {
this.maxFileSize = maxFileSize;
}
public boolean isImmediateFlush() {
return this.immediateFlush;
}
public void setImmediateFlush(boolean immediateFlush) {
this.immediateFlush = immediateFlush;
}
public boolean isUseFileAppender() {
return this.useFileAppender;
}
public void setUseFileAppender(boolean useFileAppender) {
this.useFileAppender = useFileAppender;
}
public boolean isUseLogCatAppender() {
return this.useLogCatAppender;
}
public void setUseLogCatAppender(boolean useLogCatAppender) {
this.useLogCatAppender = useLogCatAppender;
}
public void setResetConfiguration(boolean resetConfiguration) {
this.resetConfiguration = resetConfiguration;
}
public boolean isResetConfiguration() {
return this.resetConfiguration;
}
public void setInternalDebugging(boolean internalDebugging) {
this.internalDebugging = internalDebugging;
}
public boolean isInternalDebugging() {
return this.internalDebugging;
}
}
\ No newline at end of file
package com.example.log4j;
import java.io.File;
import java.util.Date;
import java.util.Locale;
import java.text.SimpleDateFormat;
import org.apache.log4j.Level;
import android.os.Environment;
/**
* LogUtil 工具类
*
* @author Administrator
*/
@SuppressWarnings("all")
public class LogUtil {
private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd");
private static final String timeStr = formatter.format(new Date(System.currentTimeMillis()));
/**
* 这里的AppName决定log的文件位置和名称
**/
private static final String APP_NAME = "MockGPS";
/**
* 设置log文件全路径,这里是 MyApp/Log/myapp.log
**/
private static final String LOG_FILE_PATH = Environment.getExternalStorageDirectory() + File.separator + APP_NAME
+ File.separator + "Log" + File.separator + APP_NAME.toLowerCase(Locale.CHINA) + timeStr + ".log";
/**
* ### log文件的格式
* <p>
* ### 输出格式解释:
* ### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
* <p>
* ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
* ### %c: 全类名
* ### %M: 调用的方法名称
* ### %F:%L 类名:行号(在控制台可以追踪代码)
* ### %n: 换行
* ### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
* ### %m: 日志信息
* <p>
* ### 输出的信息大概如下:
* ### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
* ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
*/
private static final String LOG_FILE_PATTERN = "[%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n";
/**
* 生产环境下的log等级
**/
private static final Level LOG_LEVEL_PRODUCE = Level.ALL;
/**
* 发布以后的log等级
**/
private static final Level LOG_LEVEL_RELEASE = Level.INFO;
/**
* 配置log4j参数
*/
public static void configLog() {
LogConfig logConfig = new LogConfig();
/** 设置Log等级,生产环境下调用setLogToProduce(),发布后调用setLogToRelease() **/
setLogToProduce(logConfig);
logConfig.setFileName(LOG_FILE_PATH);
logConfig.setLevel("org.apache", Level.ERROR);
logConfig.setFilePattern(LOG_FILE_PATTERN);
logConfig.setMaxFileSize(1024 * 1024 * 5);
logConfig.setImmediateFlush(true);
logConfig.configure();
}
/**
* 将log设置为生产环境
*
* @param logConfig
*/
private static void setLogToProduce(LogConfig logConfig) {
logConfig.setRootLevel(LOG_LEVEL_PRODUCE);
}
/**
* 将log设置为发布以后的环境
*
* @param logConfig
*/
private static void setLogToRelease(LogConfig logConfig) {
logConfig.setRootLevel(LOG_LEVEL_RELEASE);
}
}
...@@ -8,6 +8,7 @@ import android.os.Build; ...@@ -8,6 +8,7 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
...@@ -30,6 +31,7 @@ public class StartActivity extends AppCompatActivity { ...@@ -30,6 +31,7 @@ public class StartActivity extends AppCompatActivity {
permissions = new ArrayList<String>(); permissions = new ArrayList<String>();
getPersimmions(); getPersimmions();
isStart=false; isStart=false;
Log.d("START",""+permissions.size());
if (permissions.size()==0){ if (permissions.size()==0){
new Handler().postDelayed(new Runnable() { new Handler().postDelayed(new Runnable() {
public void run() { public void run() {
...@@ -87,9 +89,9 @@ public class StartActivity extends AppCompatActivity { ...@@ -87,9 +89,9 @@ public class StartActivity extends AppCompatActivity {
permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n";
} }
// 读取电话状态权限 // 读取电话状态权限
if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) { // if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) {
permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n"; // permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n";
} // }
if (permissions.size() > 0) { if (permissions.size() > 0) {
requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST); requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST);
......
...@@ -60,7 +60,7 @@ public class FloatWindow implements View.OnTouchListener { ...@@ -60,7 +60,7 @@ public class FloatWindow implements View.OnTouchListener {
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mWindowParams.gravity = Gravity.START | Gravity.TOP; mWindowParams.gravity = Gravity.START | Gravity.TOP;
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.height = 96; mWindowParams.height = 108;
// mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; // mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
Log.d("FLOAT","initFloatWindow finish"); Log.d("FLOAT","initFloatWindow finish");
} }
......
...@@ -27,8 +27,11 @@ import android.view.Gravity; ...@@ -27,8 +27,11 @@ import android.view.Gravity;
import android.widget.Toast; import android.widget.Toast;
import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.model.LatLng;
import com.example.log4j.LogUtil;
import com.example.mockgps.R; import com.example.mockgps.R;
import org.apache.log4j.Logger;
import java.util.UUID; import java.util.UUID;
public class MockGpsService extends Service { public class MockGpsService extends Service {
...@@ -53,6 +56,8 @@ public class MockGpsService extends Service { ...@@ -53,6 +56,8 @@ public class MockGpsService extends Service {
public static final int RunCode=0x01; public static final int RunCode=0x01;
public static final int StopCode=0x02; public static final int StopCode=0x02;
//log debug
private static Logger log = Logger.getLogger(MockGpsService.class);
@Nullable @Nullable
@Override @Override
...@@ -63,7 +68,9 @@ public class MockGpsService extends Service { ...@@ -63,7 +68,9 @@ public class MockGpsService extends Service {
@SuppressLint("WrongConstant") @SuppressLint("WrongConstant")
@Override @Override
public void onCreate() { public void onCreate() {
LogUtil.configLog();
Log.d(TAG, "onCreate"); Log.d(TAG, "onCreate");
log.debug(TAG+ ": onCreate");
super.onCreate(); super.onCreate();
locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
...@@ -72,9 +79,13 @@ public class MockGpsService extends Service { ...@@ -72,9 +79,13 @@ public class MockGpsService extends Service {
rmNetworkProvider(); rmNetworkProvider();
//add a new network location provider //add a new network location provider
// setGPSProvider();
setNewNetworkProvider(); setNewNetworkProvider();
// rmGPSProvider();
// setGPSProvider();
//setGPSProvider();
//thread //thread
handlerThread=new HandlerThread(getUUID(),-2); handlerThread=new HandlerThread(getUUID(),-2);
handlerThread.start(); handlerThread.start();
...@@ -84,6 +95,13 @@ public class MockGpsService extends Service { ...@@ -84,6 +95,13 @@ public class MockGpsService extends Service {
try { try {
Thread.sleep(333); Thread.sleep(333);
if (!isStop){ if (!isStop){
//remove default network location provider
//rmNetworkProvider();
//add a new network location provider
//setNewNetworkProvider();
setNetworkLocation(); setNetworkLocation();
sendEmptyMessage(0); sendEmptyMessage(0);
//broadcast to MainActivity //broadcast to MainActivity
...@@ -94,7 +112,8 @@ public class MockGpsService extends Service { ...@@ -94,7 +112,8 @@ public class MockGpsService extends Service {
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
Log.d(TAG, "setNetworkLocation error"); Log.d(TAG, "handleMessage error");
log.debug(TAG+ ": handleMessage error");
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
} }
...@@ -106,12 +125,14 @@ public class MockGpsService extends Service { ...@@ -106,12 +125,14 @@ public class MockGpsService extends Service {
public void onStart(Intent intent, int startId) { public void onStart(Intent intent, int startId) {
super.onStart(intent, startId); super.onStart(intent, startId);
Log.d(TAG, "onStart"); Log.d(TAG, "onStart");
log.debug(TAG+ ": onStart");
} }
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand"); Log.d(TAG, "onStartCommand");
log.debug(TAG+ ": onStartCommand");
// DisplayToast("Mock Location Service Start"); // DisplayToast("Mock Location Service Start");
// //
...@@ -145,6 +166,7 @@ public class MockGpsService extends Service { ...@@ -145,6 +166,7 @@ public class MockGpsService extends Service {
//get location info from mainActivity //get location info from mainActivity
latLngInfo=intent.getStringExtra("key"); latLngInfo=intent.getStringExtra("key");
Log.d(TAG, "dataFromMain is "+latLngInfo); Log.d(TAG, "dataFromMain is "+latLngInfo);
log.debug(TAG+ ": dataFromMain is "+latLngInfo);
//start to refresh location //start to refresh location
isStop=false; isStop=false;
...@@ -165,6 +187,7 @@ public class MockGpsService extends Service { ...@@ -165,6 +187,7 @@ public class MockGpsService extends Service {
@Override @Override
public void onDestroy() { public void onDestroy() {
Log.d(TAG, "onDestroy"); Log.d(TAG, "onDestroy");
log.debug(TAG+ ": onDestroy");
// Toast.makeText(this, "Service destroyed", Toast.LENGTH_SHORT).show(); // Toast.makeText(this, "Service destroyed", Toast.LENGTH_SHORT).show();
// DisplayToast("Mock Loction Service finish"); // DisplayToast("Mock Loction Service finish");
...@@ -178,6 +201,7 @@ public class MockGpsService extends Service { ...@@ -178,6 +201,7 @@ public class MockGpsService extends Service {
handlerThread.quit(); handlerThread.quit();
rmNetworkProvider(); rmNetworkProvider();
//rmGPSProvider();
stopForeground(true); stopForeground(true);
//broadcast to MainActivity //broadcast to MainActivity
...@@ -219,15 +243,20 @@ public class MockGpsService extends Service { ...@@ -219,15 +243,20 @@ public class MockGpsService extends Service {
//set network location //set network location
private void setNetworkLocation() { private void setNetworkLocation() {
//default location 30.5437233 104.0610342 成都长虹科技大厦 //default location 30.5437233 104.0610342 成都长虹科技大厦
Log.d(TAG, "setNetworkLocation: "+latLngInfo);
log.debug(TAG+ ": setNetworkLocation: "+latLngInfo);
String latLngStr[]=latLngInfo.split("&"); String latLngStr[]=latLngInfo.split("&");
LatLng latLng = new LatLng(Double.valueOf(latLngStr[1]), Double.valueOf(latLngStr[0])); LatLng latLng = new LatLng(Double.valueOf(latLngStr[1]), Double.valueOf(latLngStr[0]));
String providerStr = LocationManager.NETWORK_PROVIDER; String providerStr = LocationManager.NETWORK_PROVIDER;
// String providerStr2 = LocationManager.GPS_PROVIDER;
try { try {
locationManager.setTestProviderLocation(providerStr, generateLocation(latLng)); locationManager.setTestProviderLocation(providerStr, generateLocation(latLng));
// locationManager.setTestProviderLocation(providerStr2, generateLocation(latLng));
//for test //for test
// locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, generateLocation(latLng)); // locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, generateLocation(latLng));
} catch (Exception e) { } catch (Exception e) {
Log.d(TAG, "setNetworkLocation error"); Log.d(TAG, "setNetworkLocation error");
log.debug(TAG+ ": setNetworkLocation error");
e.printStackTrace(); e.printStackTrace();
} }
} }
...@@ -235,15 +264,23 @@ public class MockGpsService extends Service { ...@@ -235,15 +264,23 @@ public class MockGpsService extends Service {
//remove network provider //remove network provider
private void rmNetworkProvider(){ private void rmNetworkProvider(){
try { try {
String providerStr = LocationManager.NETWORK_PROVIDER; for(int i=0;i<3;i++){
if (locationManager.isProviderEnabled(providerStr)){ String providerStr = LocationManager.NETWORK_PROVIDER;
Log.d(TAG, "now remove NetworkProvider"); if (locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now remove NetworkProvider: "+i);
log.debug(TAG+ ": now remove NetworkProvider: "+i);
// locationManager.setTestProviderEnabled(providerStr,true); // locationManager.setTestProviderEnabled(providerStr,true);
locationManager.removeTestProvider(providerStr); locationManager.removeTestProvider(providerStr);
}else{
Log.d(TAG, "NetworkProvider is not enabled: "+i);
log.debug(TAG+ ": NetworkProvider is not enabled: "+i);
}
} }
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
Log.d(TAG, "rmNetworkProvider error"); Log.d(TAG, "rmNetworkProvider error");
log.debug(TAG+ ": rmNetworkProvider error");
} }
} }
...@@ -255,38 +292,57 @@ public class MockGpsService extends Service { ...@@ -255,38 +292,57 @@ public class MockGpsService extends Service {
false, false, false, false, false, false, false, false,
false, 1, Criteria.ACCURACY_FINE); false, 1, Criteria.ACCURACY_FINE);
Log.d(TAG,"addTestProvider[network] success"); Log.d(TAG,"addTestProvider[network] success");
log.debug(TAG+": addTestProvider[network] success");
// locationManager.setTestProviderStatus("network", LocationProvider.AVAILABLE, null, // locationManager.setTestProviderStatus("network", LocationProvider.AVAILABLE, null,
// System.currentTimeMillis()); // System.currentTimeMillis());
}catch (SecurityException e){ }catch (SecurityException e){
Log.d(TAG,"setNewNetworkProvider error"); Log.d(TAG,"setNewNetworkProvider error");
log.debug(TAG+": setNewNetworkProvider error");
} }
if (!locationManager.isProviderEnabled(providerStr)){ if (!locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now setTestProviderEnabled[network]"); Log.d(TAG, "now setTestProviderEnabled[network]");
log.debug(TAG+ ": now setTestProviderEnabled[network]");
locationManager.setTestProviderEnabled(providerStr,true); locationManager.setTestProviderEnabled(providerStr,true);
} }
} }
// for test: set GPS provider // for test: set GPS provider
private void rmGPSProvider(){
try {
String providerStr = LocationManager.GPS_PROVIDER;
if (locationManager.isProviderEnabled(providerStr)){
Log.d(TAG, "now remove GPSProvider");
// locationManager.setTestProviderEnabled(providerStr,true);
locationManager.removeTestProvider(providerStr);
}
}catch (Exception e){
e.printStackTrace();
Log.d(TAG, "rmGPSProvider error");
}
}
private void setGPSProvider(){ private void setGPSProvider(){
LocationProvider provider = locationManager.getProvider(LocationManager.GPS_PROVIDER); LocationProvider provider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
if (provider != null) { // if (provider != null) {
locationManager.addTestProvider( // locationManager.addTestProvider(
provider.getName() // provider.getName()
, provider.requiresNetwork() // , provider.requiresNetwork()
, provider.requiresSatellite() // , provider.requiresSatellite()
, provider.requiresCell() // , provider.requiresCell()
, provider.hasMonetaryCost() // , provider.hasMonetaryCost()
, provider.supportsAltitude() // , provider.supportsAltitude()
, provider.supportsSpeed() // , provider.supportsSpeed()
, provider.supportsBearing() // , provider.supportsBearing()
, provider.getPowerRequirement() // , provider.getPowerRequirement()
, provider.getAccuracy()); // , provider.getAccuracy());
} else { // } else {
locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, true, false, locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, true, true,
false, true, true, true, 0, 5); false, true, true, true, 0, 5);
} // }
// if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
// }
locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
//新 //新
locationManager.setTestProviderStatus(LocationManager.GPS_PROVIDER, LocationProvider.AVAILABLE, null, locationManager.setTestProviderStatus(LocationManager.GPS_PROVIDER, LocationProvider.AVAILABLE, null,
System.currentTimeMillis()); System.currentTimeMillis());
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android" <Button xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/floatButton" android:id="@+id/floatButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/white"> android:background="@color/white">
<ImageView <ImageView
...@@ -16,14 +17,14 @@ ...@@ -16,14 +17,14 @@
<Button <Button
android:id="@+id/startButton" android:id="@+id/startButton"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="30dp" android:layout_height="35dp"
android:background="@drawable/btn_bottom_confirm_bg" android:background="@drawable/btn_bottom_confirm_bg"
android:gravity="center" android:gravity="center"
android:text="@string/startUse" android:text="@string/startUse"
android:textSize="17sp" android:textSize="17sp"
android:textAlignment="center" android:textAlignment="center"
android:layout_gravity="bottom|center" android:layout_gravity="bottom|center"
android:layout_margin="96dp" /> android:layout_margin="106dp" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -20,14 +20,15 @@ ...@@ -20,14 +20,15 @@
android:id="@+id/nav_manage" android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage" android:icon="@drawable/ic_menu_manage"
android:title="设置" /> android:title="设置" />
<item
android:id="@+id/nav_bug_report"
android:icon="@drawable/ic_bug_report_18pt_3x"
android:title="问题反馈" />
</group> </group>
<item android:title="Communicate"> <item android:title="Communicate">
<menu> <menu>
<!--<item-->
<!--android:id="@+id/nav_share"-->
<!--android:icon="@drawable/ic_menu_share"-->
<!--android:title="分享" />-->
<item <item
android:id="@+id/nav_send" android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send" android:icon="@drawable/ic_menu_send"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册