@@ -1,16 +1,21 @@ | |||||
package com.nsgk.ruralWeb; | package com.nsgk.ruralWeb; | ||||
import android.annotation.SuppressLint; | import android.annotation.SuppressLint; | ||||
import android.content.Context; | |||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.content.pm.PackageManager; | import android.content.pm.PackageManager; | ||||
import android.graphics.Bitmap; | import android.graphics.Bitmap; | ||||
import android.os.Build; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.os.Handler; | import android.os.Handler; | ||||
import android.util.Log; | import android.util.Log; | ||||
import android.view.KeyEvent; | import android.view.KeyEvent; | ||||
import android.view.ViewGroup; | import android.view.ViewGroup; | ||||
import android.webkit.ConsoleMessage; | |||||
import android.webkit.GeolocationPermissions; | |||||
import android.webkit.WebBackForwardList; | import android.webkit.WebBackForwardList; | ||||
import android.webkit.WebHistoryItem; | import android.webkit.WebHistoryItem; | ||||
import android.webkit.WebSettings; | |||||
import android.webkit.WebView; | import android.webkit.WebView; | ||||
import android.widget.LinearLayout; | import android.widget.LinearLayout; | ||||
import android.widget.RelativeLayout; | import android.widget.RelativeLayout; | ||||
@@ -57,6 +62,9 @@ public class FullscreenActivity extends AppCompatActivity { | |||||
setContentView(R.layout.activity_fullscreen); | setContentView(R.layout.activity_fullscreen); | ||||
String appHomeUrl = GetHomeUrl(); | String appHomeUrl = GetHomeUrl(); | ||||
boolean logcatConsole = GetPreference().GetBool(NSPreference.LOGCAT_CONSOLE_OUTPUT, NSContextUtils.BuildIsDebug(this)); | |||||
if(logcatConsole) | |||||
Log.i(ID_TAG, logcatConsole ? "输出控制台到logcat" : "不输出控制台"); | |||||
//appHomeUrl = "http://192.168.0.250:85/sunVillage_info/login"; | //appHomeUrl = "http://192.168.0.250:85/sunVillage_info/login"; | ||||
Log.i(ID_TAG, "App home url: " + appHomeUrl); | Log.i(ID_TAG, "App home url: " + appHomeUrl); | ||||
// init(); | // init(); | ||||
@@ -84,6 +92,38 @@ public class FullscreenActivity extends AppCompatActivity { | |||||
} | } | ||||
m_lastUrl = url; | m_lastUrl = url; | ||||
} | } | ||||
@Override | |||||
public boolean onConsoleMessage(ConsoleMessage consoleMessage) | |||||
{ | |||||
if(logcatConsole) | |||||
{ | |||||
String text = "[" + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber() + "] " + consoleMessage.message(); | |||||
switch(consoleMessage.messageLevel()) | |||||
{ | |||||
case WARNING: | |||||
Log.w("Console", text); | |||||
break; | |||||
case ERROR: | |||||
Log.e("Console", text); | |||||
break; | |||||
case DEBUG: | |||||
Log.d("Console", text); | |||||
break; | |||||
case LOG: | |||||
default: | |||||
Log.i("Console", text); | |||||
break; | |||||
} | |||||
} | |||||
return super.onConsoleMessage(consoleMessage); | |||||
} | |||||
@Override | |||||
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { | |||||
callback.invoke(origin, true, false); | |||||
super.onGeolocationPermissionsShowPrompt(origin, callback); | |||||
} | |||||
}) | }) | ||||
.setWebViewClient(new WebViewClient() { | .setWebViewClient(new WebViewClient() { | ||||
})//WebViewClient , 与 WebView 使用一致 ,但是请勿获取WebView调用setWebViewClient(xx)方法了,会覆盖AgentWeb DefaultWebClient,同时相应的中间件也会失效。 | })//WebViewClient , 与 WebView 使用一致 ,但是请勿获取WebView调用setWebViewClient(xx)方法了,会覆盖AgentWeb DefaultWebClient,同时相应的中间件也会失效。 | ||||
@@ -111,14 +151,21 @@ public class FullscreenActivity extends AppCompatActivity { | |||||
mAgentWeb = builder.go(appHomeUrl); //WebView载入该url地址的页面并显示。 | mAgentWeb = builder.go(appHomeUrl); //WebView载入该url地址的页面并显示。 | ||||
WebSettings settings = GetWebView().getSettings(); | |||||
int fontScale = GetPreference().GetInt(NSPreference.FONT_SCALE); | int fontScale = GetPreference().GetInt(NSPreference.FONT_SCALE); | ||||
Log.i(ID_TAG, "全局字体缩放: " + fontScale + "%"); | Log.i(ID_TAG, "全局字体缩放: " + fontScale + "%"); | ||||
if(fontScale > 0 && fontScale != 100) | if(fontScale > 0 && fontScale != 100) | ||||
GetWebView().getSettings().setTextZoom(fontScale); | |||||
settings.setTextZoom(fontScale); | |||||
settings.setDatabaseEnabled(true); | |||||
settings.setDomStorageEnabled(true); | |||||
settings.setGeolocationEnabled(true); | |||||
// 注入宿主对象 | // 注入宿主对象 | ||||
envWindowObject = new NSEnvWindowObject(this, new Handler(), GetWebView()); | envWindowObject = new NSEnvWindowObject(this, new Handler(), GetWebView()); | ||||
mAgentWeb.getJsInterfaceHolder().addJavaObject("_Native_object", envWindowObject); | mAgentWeb.getJsInterfaceHolder().addJavaObject("_Native_object", envWindowObject); | ||||
mAgentWeb.getJsInterfaceHolder().addJavaObject("Android", envWindowObject); | |||||
/* 上边url是各个APP项目的入口地址 | /* 上边url是各个APP项目的入口地址 | ||||
事项审批 http://116.255.223.226:82/yinnongLogin 图标 ic_launcher_sxsp 或者 ic_launcher_yhzl | 事项审批 http://116.255.223.226:82/yinnongLogin 图标 ic_launcher_sxsp 或者 ic_launcher_yhzl | ||||
@@ -2,13 +2,14 @@ package com.nsgk.ruralWeb.enums; | |||||
public final class NSEnums | public final class NSEnums | ||||
{ | { | ||||
public final class LocationScheme | |||||
public final class LocationMode | |||||
{ | { | ||||
public static final String SYSTEM = "system"; | public static final String SYSTEM = "system"; | ||||
public static final String GAODE = "gaode"; | public static final String GAODE = "gaode"; | ||||
public static final String REALTIME = "realtime"; | public static final String REALTIME = "realtime"; | ||||
public static final String H5 = "h5"; | |||||
private LocationScheme() {} | |||||
private LocationMode() {} | |||||
} | } | ||||
public final class LocationProvider | public final class LocationProvider | ||||
@@ -410,7 +410,7 @@ public class NSAMapLocation implements AMapLocationListener | |||||
/** | /** | ||||
* 同步调用, 会锁住线程 | * 同步调用, 会锁住线程 | ||||
*/ | */ | ||||
public NSLocationInfo Read(int count) | |||||
public NSLocationInfo Read(int count, int timeout) | |||||
{ | { | ||||
CheckInitialization(true); | CheckInitialization(true); | ||||
/* if(IsRunning()) | /* if(IsRunning()) | ||||
@@ -418,14 +418,16 @@ public class NSAMapLocation implements AMapLocationListener | |||||
throw new RuntimeException("请先停止定位"); | throw new RuntimeException("请先停止定位"); | ||||
}*/ | }*/ | ||||
Log.d(ID_TAG, "定位线程: " + Thread.currentThread().getId()); | |||||
if(timeout < 0) | |||||
timeout = 0; | |||||
Log.d(ID_TAG, "AMap定位线程: " + Thread.currentThread().getId() + ", 超时设置: " + timeout); | |||||
synchronized(m_lock) | synchronized(m_lock) | ||||
{ | { | ||||
try | try | ||||
{ | { | ||||
CleanLastLocation(); | CleanLastLocation(); | ||||
Run(count); | Run(count); | ||||
m_lock.wait(); | |||||
m_lock.wait(timeout); | |||||
} | } | ||||
catch(Exception e) | catch(Exception e) | ||||
{ | { | ||||
@@ -303,7 +303,7 @@ public class NSRealtimeLocation implements LocationListener | |||||
/** | /** | ||||
* 同步调用, 会锁住线程 | * 同步调用, 会锁住线程 | ||||
*/ | */ | ||||
public NSLocationInfo Read(int count) | |||||
public NSLocationInfo Read(int count, int timeout) | |||||
{ | { | ||||
CheckInitialization(true); | CheckInitialization(true); | ||||
/* if(IsRunning()) | /* if(IsRunning()) | ||||
@@ -311,14 +311,16 @@ public class NSRealtimeLocation implements LocationListener | |||||
throw new RuntimeException("请先停止定位"); | throw new RuntimeException("请先停止定位"); | ||||
}*/ | }*/ | ||||
Log.d(ID_TAG, "定位线程: " + Thread.currentThread().getId()); | |||||
if(timeout < 0) | |||||
timeout = 0; | |||||
Log.d(ID_TAG, "实时定位线程: " + Thread.currentThread().getId() + ", 超时设置: " + timeout); | |||||
synchronized(m_lock) | synchronized(m_lock) | ||||
{ | { | ||||
try | try | ||||
{ | { | ||||
CleanLastLocation(); | CleanLastLocation(); | ||||
Run(count); | Run(count); | ||||
m_lock.wait(); | |||||
m_lock.wait(timeout); | |||||
} | } | ||||
catch(Exception e) | catch(Exception e) | ||||
{ | { | ||||
@@ -42,16 +42,23 @@ public final class NSConstants | |||||
return BuildConfig.APP_ICON; | return BuildConfig.APP_ICON; | ||||
} | } | ||||
public static boolean IsHttps() | |||||
{ | |||||
return AppHomeUrl().startsWith("https://"); | |||||
} | |||||
// 偏好默认值 | // 偏好默认值 | ||||
public static final String DEFAULT_LOCATION_SCHEME = NSEnums.LocationScheme.REALTIME; | |||||
public static final String DEFAULT_LOCATION_MODE = NSEnums.LocationMode.REALTIME; | |||||
public static final int DEFAULT_LOCATION_GAODE_INTERVAL = 1000; | public static final int DEFAULT_LOCATION_GAODE_INTERVAL = 1000; | ||||
public static final int DEFAULT_LOCATION_GAODE_READ_COUNT = 1; | public static final int DEFAULT_LOCATION_GAODE_READ_COUNT = 1; | ||||
public static final String DEFAULT_LOCATION_PROVIDER = LocationManager.GPS_PROVIDER; | public static final String DEFAULT_LOCATION_PROVIDER = LocationManager.GPS_PROVIDER; | ||||
public static final int DEFAULT_LOCATION_REALTIME_INTERVAL = 1000; | public static final int DEFAULT_LOCATION_REALTIME_INTERVAL = 1000; | ||||
public static final int DEFAULT_LOCATION_REALTIME_DISTANCE = 1; | |||||
public static final int DEFAULT_LOCATION_REALTIME_DISTANCE = 0; // 1 | |||||
public static final int DEFAULT_LOCATION_REALTIME_READ_COUNT = 1; | public static final int DEFAULT_LOCATION_REALTIME_READ_COUNT = 1; | ||||
public static final boolean DEFAULT_OPEN_LAST_URL = false; | public static final boolean DEFAULT_OPEN_LAST_URL = false; | ||||
public static final int DEFAULT_FONT_SCALE = 100; | public static final int DEFAULT_FONT_SCALE = 100; | ||||
public static final boolean DEFAULT_LOGCAT_CONSOLE_OUTPUT = false; | |||||
public static final int DEFAULT_LOCATION_TIMEOUT = 0; | |||||
private NSConstants() {} | private NSConstants() {} | ||||
} | } |
@@ -8,19 +8,21 @@ import com.nsgk.ruralWeb.utils.NSStr; | |||||
public final class NSPreference | public final class NSPreference | ||||
{ | { | ||||
public static final String LOCATION_SCHEME = "location_scheme"; | |||||
public static final String LOCATION_MODE = "location_mode"; | |||||
public static final String LOCATION_GAODE_INTERVAL = "location_gaode_interval"; | public static final String LOCATION_GAODE_INTERVAL = "location_gaode_interval"; | ||||
public static final String LOCATION_GAODE_READ_COUNT = "location_gaode_read_count"; | public static final String LOCATION_GAODE_READ_COUNT = "location_gaode_read_count"; | ||||
public static final String LOCATION_PROVIDER = "location_provider"; | |||||
public static final String LOCATION_PROVIDER = "location_provider"; | |||||
public static final String LOCATION_REALTIME_INTERVAL = "location_realtime_interval"; | public static final String LOCATION_REALTIME_INTERVAL = "location_realtime_interval"; | ||||
public static final String LOCATION_REALTIME_DISTANCE = "location_realtime_distance"; | public static final String LOCATION_REALTIME_DISTANCE = "location_realtime_distance"; | ||||
public static final String LOCATION_REALTIME_READ_COUNT = "location_realtime_read_count"; | public static final String LOCATION_REALTIME_READ_COUNT = "location_realtime_read_count"; | ||||
public static final String OPEN_LAST_URL = "open_last_url"; | public static final String OPEN_LAST_URL = "open_last_url"; | ||||
public static final String LAST_ACCESS_URL = "last_access_url"; | public static final String LAST_ACCESS_URL = "last_access_url"; | ||||
public static final String COOKIES = "cookies"; | public static final String COOKIES = "cookies"; | ||||
public static final String FONT_SCALE = "font_scale"; | |||||
public static final String FONT_SCALE = "font_scale"; | |||||
public static final String LOGCAT_CONSOLE_OUTPUT = "logcat_console_output"; | |||||
public static final String LOCATION_TIMEOUT = "location_timeout"; | |||||
public static final String RESET_SETTINGS = "RESET_SETTINGS"; | public static final String RESET_SETTINGS = "RESET_SETTINGS"; | ||||
public static final String VERSION = "VERSION"; | |||||
public static final String VERSION = "VERSION"; | |||||
private final Context context; | private final Context context; | ||||
@@ -5,6 +5,7 @@ import android.content.DialogInterface; | |||||
import android.content.SharedPreferences; | import android.content.SharedPreferences; | ||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.text.Html; | import android.text.Html; | ||||
import android.util.Log; | |||||
import android.widget.Toast; | import android.widget.Toast; | ||||
import androidx.appcompat.app.AlertDialog; | import androidx.appcompat.app.AlertDialog; | ||||
@@ -15,10 +16,14 @@ import androidx.preference.SeekBarPreference; | |||||
import com.nsgk.ruralWeb.BuildConfig; | import com.nsgk.ruralWeb.BuildConfig; | ||||
import com.nsgk.ruralWeb.R; | import com.nsgk.ruralWeb.R; | ||||
import com.nsgk.ruralWeb.enums.NSEnums; | |||||
import com.nsgk.ruralWeb.sys.NSConstants; | import com.nsgk.ruralWeb.sys.NSConstants; | ||||
import com.nsgk.ruralWeb.sys.NSPreference; | import com.nsgk.ruralWeb.sys.NSPreference; | ||||
import com.nsgk.ruralWeb.utils.NSContextUtils; | import com.nsgk.ruralWeb.utils.NSContextUtils; | ||||
import com.nsgk.ruralWeb.utils.NSMisc; | import com.nsgk.ruralWeb.utils.NSMisc; | ||||
import com.nsgk.ruralWeb.utils.NSStr; | |||||
import java.util.Objects; | |||||
import cn.hutool.core.util.NumberUtil; | import cn.hutool.core.util.NumberUtil; | ||||
import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||
@@ -33,8 +38,8 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
Preference preference; | Preference preference; | ||||
final Context context = getContext(); | final Context context = getContext(); | ||||
preference = findPreference(NSPreference.LOCATION_SCHEME); | |||||
preference.setDefaultValue(NSConstants.DEFAULT_LOCATION_SCHEME); | |||||
preference = findPreference(NSPreference.LOCATION_MODE); | |||||
preference.setDefaultValue(NSConstants.DEFAULT_LOCATION_MODE); | |||||
preference.setOnPreferenceChangeListener(this); | preference.setOnPreferenceChangeListener(this); | ||||
preference = findPreference(NSPreference.LOCATION_GAODE_INTERVAL); | preference = findPreference(NSPreference.LOCATION_GAODE_INTERVAL); | ||||
@@ -69,11 +74,22 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
preference.setDefaultValue(NSConstants.DEFAULT_FONT_SCALE); | preference.setDefaultValue(NSConstants.DEFAULT_FONT_SCALE); | ||||
preference.setOnPreferenceChangeListener(this); | preference.setOnPreferenceChangeListener(this); | ||||
preference = findPreference(NSPreference.LOGCAT_CONSOLE_OUTPUT); | |||||
preference.setDefaultValue("" + NSConstants.DEFAULT_LOGCAT_CONSOLE_OUTPUT); | |||||
preference.setOnPreferenceChangeListener(this); | |||||
preference = findPreference(NSPreference.LOCATION_TIMEOUT); | |||||
preference.setDefaultValue("" + NSConstants.DEFAULT_LOCATION_TIMEOUT); | |||||
preference.setOnPreferenceChangeListener(this); | |||||
preference = findPreference(NSPreference.RESET_SETTINGS); | preference = findPreference(NSPreference.RESET_SETTINGS); | ||||
preference.setOnPreferenceClickListener(this); | preference.setOnPreferenceClickListener(this); | ||||
preference = findPreference(NSPreference.VERSION); | preference = findPreference(NSPreference.VERSION); | ||||
preference.setOnPreferenceClickListener(this); | preference.setOnPreferenceClickListener(this); | ||||
preference = findPreference("location_gaode"); | |||||
preference.setVisible(false); | |||||
} | } | ||||
private boolean CheckValueIsNumber(Object newValue, Integer min) | private boolean CheckValueIsNumber(Object newValue, Integer min) | ||||
@@ -128,6 +144,10 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
if(!CheckValueIsNumber(newValue, 1)) | if(!CheckValueIsNumber(newValue, 1)) | ||||
return false; | return false; | ||||
break; | break; | ||||
case NSPreference.LOCATION_TIMEOUT: | |||||
if(!CheckValueIsNumber(newValue, 0)) | |||||
return false; | |||||
break; | |||||
case NSPreference.FONT_SCALE: { | case NSPreference.FONT_SCALE: { | ||||
int i = (int)newValue; | int i = (int)newValue; | ||||
int newi = Math.round((float)i / 10.0f) * 10; | int newi = Math.round((float)i / 10.0f) * 10; | ||||
@@ -143,6 +163,22 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
} | } | ||||
break; | break; | ||||
} | } | ||||
case NSPreference.LOCATION_MODE: | |||||
if(Objects.equals(NSEnums.LocationMode.GAODE, newValue)) | |||||
{ | |||||
Log.w(ID_TAG, "高德定位被禁用"); | |||||
return false; | |||||
} | |||||
if(Objects.equals(NSEnums.LocationMode.H5, newValue)) | |||||
{ | |||||
if(!NSConstants.IsHttps()) | |||||
{ | |||||
Log.w(ID_TAG, "非https不支持H5定位"); | |||||
Toast.makeText(getContext(), "当前不支持H5定位", Toast.LENGTH_SHORT).show(); | |||||
return false; | |||||
} | |||||
} | |||||
break; | |||||
} | } | ||||
SetSummary(key, newValue); | SetSummary(key, newValue); | ||||
@@ -174,7 +210,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
{ | { | ||||
NSPreference preference = new NSPreference(getContext()); | NSPreference preference = new NSPreference(getContext()); | ||||
preference.Write() | preference.Write() | ||||
.putString(NSPreference.LOCATION_SCHEME, NSConstants.DEFAULT_LOCATION_SCHEME) | |||||
.putString(NSPreference.LOCATION_MODE, NSConstants.DEFAULT_LOCATION_MODE) | |||||
.putString(NSPreference.LOCATION_GAODE_INTERVAL, "" + NSConstants.DEFAULT_LOCATION_GAODE_INTERVAL) | .putString(NSPreference.LOCATION_GAODE_INTERVAL, "" + NSConstants.DEFAULT_LOCATION_GAODE_INTERVAL) | ||||
.putString(NSPreference.LOCATION_GAODE_READ_COUNT, "" + NSConstants.DEFAULT_LOCATION_GAODE_READ_COUNT) | .putString(NSPreference.LOCATION_GAODE_READ_COUNT, "" + NSConstants.DEFAULT_LOCATION_GAODE_READ_COUNT) | ||||
.putBoolean(NSPreference.OPEN_LAST_URL, NSConstants.DEFAULT_OPEN_LAST_URL) | .putBoolean(NSPreference.OPEN_LAST_URL, NSConstants.DEFAULT_OPEN_LAST_URL) | ||||
@@ -183,6 +219,8 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
.putString(NSPreference.LOCATION_REALTIME_DISTANCE, "" + NSConstants.DEFAULT_LOCATION_REALTIME_DISTANCE) | .putString(NSPreference.LOCATION_REALTIME_DISTANCE, "" + NSConstants.DEFAULT_LOCATION_REALTIME_DISTANCE) | ||||
.putString(NSPreference.LOCATION_REALTIME_READ_COUNT, "" + NSConstants.DEFAULT_LOCATION_REALTIME_READ_COUNT) | .putString(NSPreference.LOCATION_REALTIME_READ_COUNT, "" + NSConstants.DEFAULT_LOCATION_REALTIME_READ_COUNT) | ||||
.putInt(NSPreference.FONT_SCALE, NSConstants.DEFAULT_FONT_SCALE) | .putInt(NSPreference.FONT_SCALE, NSConstants.DEFAULT_FONT_SCALE) | ||||
.putString(NSPreference.LOCATION_TIMEOUT, "" + NSConstants.DEFAULT_LOCATION_TIMEOUT) | |||||
.putBoolean(NSPreference.LOGCAT_CONSOLE_OUTPUT, NSConstants.DEFAULT_LOGCAT_CONSOLE_OUTPUT) | |||||
.commit() | .commit() | ||||
; | ; | ||||
} | } | ||||
@@ -229,11 +267,11 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
int i; | int i; | ||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); | SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); | ||||
if(key == null || NSPreference.LOCATION_SCHEME.equals(key)) | |||||
if(key == null || NSPreference.LOCATION_MODE.equals(key)) | |||||
{ | { | ||||
preference = findPreference(NSPreference.LOCATION_SCHEME); | |||||
value = newValue != null ? newValue.toString() : sharedPreferences.getString(NSPreference.LOCATION_SCHEME, NSConstants.DEFAULT_LOCATION_SCHEME); | |||||
summary = NSContextUtils.GetListName(context, value, R.array.location_scheme_values, R.array.location_scheme_labels); | |||||
preference = findPreference(NSPreference.LOCATION_MODE); | |||||
value = newValue != null ? newValue.toString() : sharedPreferences.getString(NSPreference.LOCATION_MODE, NSConstants.DEFAULT_LOCATION_MODE); | |||||
summary = NSContextUtils.GetListName(context, value, R.array.location_mode_values, R.array.location_mode_labels); | |||||
preference.setSummary(summary); | preference.setSummary(summary); | ||||
} | } | ||||
@@ -303,6 +341,23 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer | |||||
preference.setSummary(summary); | preference.setSummary(summary); | ||||
} | } | ||||
if(key == null || NSPreference.LOCATION_TIMEOUT.equals(key)) | |||||
{ | |||||
preference = findPreference(NSPreference.LOCATION_TIMEOUT); | |||||
value = newValue != null && StrUtil.isNotBlank(newValue.toString()) ? newValue.toString() : sharedPreferences.getString(NSPreference.LOCATION_TIMEOUT, "" + NSConstants.DEFAULT_LOCATION_TIMEOUT); | |||||
i = NSStr.parseInt_s(value, 0); | |||||
summary = i > 0 ? i + "毫秒" : "不超时"; | |||||
preference.setSummary(summary); | |||||
} | |||||
if(key == null || NSPreference.LOGCAT_CONSOLE_OUTPUT.equals(key)) | |||||
{ | |||||
preference = findPreference(NSPreference.LOGCAT_CONSOLE_OUTPUT); | |||||
b = newValue != null ? (Boolean)newValue : sharedPreferences.getBoolean(NSPreference.LOGCAT_CONSOLE_OUTPUT, NSConstants.DEFAULT_LOGCAT_CONSOLE_OUTPUT); | |||||
summary = b ? "控制台输出到logcat" : "不输出控制台"; | |||||
preference.setSummary(summary); | |||||
} | |||||
findPreference(NSPreference.VERSION).setSummary(NSContextUtils.GetAppVersion(getContext())); | findPreference(NSPreference.VERSION).setSummary(NSContextUtils.GetAppVersion(getContext())); | ||||
} | } | ||||
} | } | ||||
@@ -3,7 +3,9 @@ package com.nsgk.ruralWeb.web; | |||||
import android.app.Activity; | import android.app.Activity; | ||||
import android.Manifest; | import android.Manifest; | ||||
import android.app.AlertDialog; | |||||
import android.content.Context; | import android.content.Context; | ||||
import android.content.DialogInterface; | |||||
import android.content.pm.PackageManager; | import android.content.pm.PackageManager; | ||||
import android.location.LocationManager; | import android.location.LocationManager; | ||||
import android.os.Handler; | import android.os.Handler; | ||||
@@ -16,6 +18,7 @@ import android.widget.Toast; | |||||
import androidx.core.app.ActivityCompat; | import androidx.core.app.ActivityCompat; | ||||
import com.nsgk.ruralWeb.FullscreenActivity; | import com.nsgk.ruralWeb.FullscreenActivity; | ||||
import com.nsgk.ruralWeb.R; | |||||
import com.nsgk.ruralWeb.enums.NSEnums; | import com.nsgk.ruralWeb.enums.NSEnums; | ||||
import com.nsgk.ruralWeb.location.NSLocationInfo; | import com.nsgk.ruralWeb.location.NSLocationInfo; | ||||
import com.nsgk.ruralWeb.location.NSAMapLocation; | import com.nsgk.ruralWeb.location.NSAMapLocation; | ||||
@@ -25,6 +28,10 @@ import com.nsgk.ruralWeb.sys.NSConstants; | |||||
import com.nsgk.ruralWeb.sys.NSPreference; | import com.nsgk.ruralWeb.sys.NSPreference; | ||||
import com.nsgk.ruralWeb.utils.NSContextUtils; | import com.nsgk.ruralWeb.utils.NSContextUtils; | ||||
import java.util.ArrayList; | |||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
public class NSEnvWindowObject | public class NSEnvWindowObject | ||||
{ | { | ||||
private static final String ID_TAG = NSEnvWindowObject.class.getName(); | private static final String ID_TAG = NSEnvWindowObject.class.getName(); | ||||
@@ -95,22 +102,22 @@ public class NSEnvWindowObject | |||||
} | } | ||||
NSLocationInfo loc; | NSLocationInfo loc; | ||||
String location = preference.GetString(NSPreference.LOCATION_SCHEME, NSConstants.DEFAULT_LOCATION_SCHEME); | |||||
String location = CurrentLocationMode(); | |||||
String provider = preference.GetString(NSPreference.LOCATION_PROVIDER, NSConstants.DEFAULT_LOCATION_PROVIDER); | String provider = preference.GetString(NSPreference.LOCATION_PROVIDER, NSConstants.DEFAULT_LOCATION_PROVIDER); | ||||
Log.d(ID_TAG, "定位提供器: " + provider); | Log.d(ID_TAG, "定位提供器: " + provider); | ||||
switch(location) | switch(location) | ||||
{ | { | ||||
case NSEnums.LocationScheme.GAODE: | |||||
case NSEnums.LocationMode.GAODE: | |||||
loc = GetAMapLocation(); | loc = GetAMapLocation(); | ||||
if(null == loc) | if(null == loc) | ||||
loc = GetBuiltInLocation(provider); | loc = GetBuiltInLocation(provider); | ||||
break; | break; | ||||
case NSEnums.LocationScheme.REALTIME: | |||||
case NSEnums.LocationMode.REALTIME: | |||||
loc = GetRealtimeLocation(); | loc = GetRealtimeLocation(); | ||||
if(null == loc) | if(null == loc) | ||||
loc = GetBuiltInLocation(provider); | loc = GetBuiltInLocation(provider); | ||||
break; | break; | ||||
case NSEnums.LocationScheme.SYSTEM: | |||||
case NSEnums.LocationMode.SYSTEM: | |||||
default: | default: | ||||
loc = GetBuiltInLocation(provider); | loc = GetBuiltInLocation(provider); | ||||
break; | break; | ||||
@@ -119,6 +126,97 @@ public class NSEnvWindowObject | |||||
return SetLastLocation(loc); | return SetLastLocation(loc); | ||||
} | } | ||||
public String CurrentLocationMode() | |||||
{ | |||||
return preference.GetString(NSPreference.LOCATION_MODE, NSConstants.DEFAULT_LOCATION_MODE); | |||||
} | |||||
@JavascriptInterface | |||||
public String GetLocationMode() | |||||
{ | |||||
return CurrentLocationMode(); | |||||
} | |||||
@JavascriptInterface | |||||
public int GetLocationTimeout() | |||||
{ | |||||
return preference.GetIntFromString(NSPreference.LOCATION_TIMEOUT, NSConstants.DEFAULT_LOCATION_TIMEOUT); | |||||
} | |||||
@JavascriptInterface | |||||
public String SelectLocationMode() | |||||
{ | |||||
final Object lock = new Object(); | |||||
String current = CurrentLocationMode(); | |||||
String[] res = { current }; | |||||
synchronized(lock) { | |||||
try | |||||
{ | |||||
RunOnUIThread(() -> { | |||||
AlertDialog.Builder builder = new AlertDialog.Builder(m_context); | |||||
String[] locationModeLabels = m_context.getResources().getStringArray(R.array.location_mode_labels); | |||||
String[] locationModeValues = m_context.getResources().getStringArray(R.array.location_mode_values); | |||||
List<String> locationModeList = new ArrayList<>(Arrays.asList(locationModeLabels)); | |||||
List<String> locationModeValueList = new ArrayList<>(Arrays.asList(locationModeValues)); | |||||
int[] selected = { locationModeValueList.indexOf(current) }; | |||||
builder.setTitle("选择定位方式") | |||||
.setSingleChoiceItems(locationModeList.toArray(new String[0]), selected[0], (DialogInterface dialog, int which) -> { | |||||
selected[0] = which; | |||||
}) | |||||
//.setCancelable(false) | |||||
; | |||||
builder.setPositiveButton("确定", (DialogInterface dialog, int which) -> { | |||||
if(selected[0] >= 0) | |||||
{ | |||||
String mode = locationModeValueList.get(selected[0]); | |||||
if(NSEnums.LocationMode.H5.equalsIgnoreCase(mode)) | |||||
{ | |||||
if(!NSConstants.IsHttps()) | |||||
{ | |||||
Toast.makeText(m_context, "当前不支持H5定位", Toast.LENGTH_SHORT).show(); | |||||
return; | |||||
} | |||||
} | |||||
preference.SetString(NSPreference.LOCATION_MODE, mode); | |||||
res[0] = mode; | |||||
String name = locationModeList.get(selected[0]); | |||||
Toast.makeText(m_context, "使用" + name + "定位", Toast.LENGTH_SHORT).show(); | |||||
} | |||||
else | |||||
Toast.makeText(m_context, "请选择定位方式", Toast.LENGTH_SHORT).show(); | |||||
}); | |||||
builder.setNeutralButton("默认", (DialogInterface dialog, int which) -> { | |||||
res[0] = NSConstants.DEFAULT_LOCATION_MODE; | |||||
preference.SetString(NSPreference.LOCATION_MODE, res[0]); | |||||
int choose = locationModeValueList.indexOf(res[0]); | |||||
String name = locationModeList.get(choose); | |||||
Toast.makeText(m_context, "使用" + name + "定位", Toast.LENGTH_SHORT).show(); | |||||
}); | |||||
builder.setNegativeButton("取消", null); | |||||
AlertDialog dialog = builder.create(); | |||||
dialog.setOnDismissListener((DialogInterface d) -> { | |||||
synchronized(lock) { | |||||
lock.notifyAll(); | |||||
} | |||||
}); | |||||
dialog.show(); | |||||
}); | |||||
lock.wait(); | |||||
} | |||||
catch(Exception e) | |||||
{ | |||||
e.printStackTrace(); | |||||
} | |||||
} | |||||
return res[0]; | |||||
} | |||||
private String ReturnLocation(NSLocationInfo loc) | private String ReturnLocation(NSLocationInfo loc) | ||||
{ | { | ||||
return loc.longitude + "," + loc.latitude; | return loc.longitude + "," + loc.latitude; | ||||
@@ -170,7 +268,9 @@ public class NSEnvWindowObject | |||||
realtimeLocation.Init(flag); | realtimeLocation.Init(flag); | ||||
} | } | ||||
long start = System.currentTimeMillis(); | long start = System.currentTimeMillis(); | ||||
loc = realtimeLocation.Read(preference.GetIntFromString(NSPreference.LOCATION_REALTIME_READ_COUNT, NSConstants.DEFAULT_LOCATION_REALTIME_READ_COUNT)); | |||||
int count = preference.GetIntFromString(NSPreference.LOCATION_REALTIME_READ_COUNT, NSConstants.DEFAULT_LOCATION_REALTIME_READ_COUNT); | |||||
int timeout = preference.GetIntFromString(NSPreference.LOCATION_TIMEOUT, NSConstants.DEFAULT_LOCATION_TIMEOUT); | |||||
loc = realtimeLocation.Read(count, timeout); | |||||
long end = System.currentTimeMillis(); | long end = System.currentTimeMillis(); | ||||
Log.i(ID_TAG, "系统实时定位结果: " + loc + ", 耗时=" + (end - start) + "毫秒"); | Log.i(ID_TAG, "系统实时定位结果: " + loc + ", 耗时=" + (end - start) + "毫秒"); | ||||
} | } | ||||
@@ -194,7 +294,9 @@ public class NSEnvWindowObject | |||||
amapLocation.Init(NSAMapLocation.DEFAULT_FLAG | NSAMapLocation.FLAG_BUILTIN_THREAD); | amapLocation.Init(NSAMapLocation.DEFAULT_FLAG | NSAMapLocation.FLAG_BUILTIN_THREAD); | ||||
} | } | ||||
long start = System.currentTimeMillis(); | long start = System.currentTimeMillis(); | ||||
loc = amapLocation.Read(preference.GetIntFromString(NSPreference.LOCATION_GAODE_READ_COUNT, NSConstants.DEFAULT_LOCATION_GAODE_READ_COUNT)); | |||||
int count = preference.GetIntFromString(NSPreference.LOCATION_GAODE_READ_COUNT, NSConstants.DEFAULT_LOCATION_GAODE_READ_COUNT); | |||||
int timeout = preference.GetIntFromString(NSPreference.LOCATION_TIMEOUT, NSConstants.DEFAULT_LOCATION_TIMEOUT); | |||||
loc = amapLocation.Read(count, timeout); | |||||
long end = System.currentTimeMillis(); | long end = System.currentTimeMillis(); | ||||
Log.i(ID_TAG, "高德定位结果: " + loc + ", 耗时=" + (end - start) + "毫秒"); | Log.i(ID_TAG, "高德定位结果: " + loc + ", 耗时=" + (end - start) + "毫秒"); | ||||
} | } | ||||
@@ -2,25 +2,27 @@ | |||||
<resources> | <resources> | ||||
<string-array name="location_scheme_values"> | |||||
<item>system</item> | |||||
<item>gaode</item> | |||||
<string-array name="location_mode_labels"> | |||||
<item>系统(实时)</item> | |||||
<item>系统</item> | |||||
<item>H5</item> | |||||
<!--<item>高德</item>--> | |||||
</string-array> | |||||
<string-array name="location_mode_values"> | |||||
<item>realtime</item> | <item>realtime</item> | ||||
<item>system</item> | |||||
<item>h5</item> | |||||
<!--<item>gaode</item>--> | |||||
</string-array> | </string-array> | ||||
<string-array name="location_scheme_labels"> | |||||
<item>系统</item> | |||||
<item>高德</item> | |||||
<item>系统实时</item> | |||||
<string-array name="location_provider_labels"> | |||||
<item>卫星</item> | |||||
<item>网络</item> | |||||
</string-array> | </string-array> | ||||
<string-array name="location_provider_values"> | <string-array name="location_provider_values"> | ||||
<item>gps</item> | <item>gps</item> | ||||
<item>network</item> | <item>network</item> | ||||
</string-array> | </string-array> | ||||
<string-array name="location_provider_labels"> | |||||
<item>GPS</item> | |||||
<item>网络</item> | |||||
</string-array> | |||||
</resources> | </resources> |
@@ -26,14 +26,23 @@ | |||||
/> | /> | ||||
<ListPreference | <ListPreference | ||||
android:dialogTitle="定位方式" | android:dialogTitle="定位方式" | ||||
android:key="location_scheme" | |||||
android:entries="@array/location_scheme_labels" | |||||
android:entryValues="@array/location_scheme_values" | |||||
android:key="location_mode" | |||||
android:entries="@array/location_mode_labels" | |||||
android:entryValues="@array/location_mode_values" | |||||
android:summary="定位方式" | android:summary="定位方式" | ||||
android:persistent="true" | android:persistent="true" | ||||
android:title="选择定位方式" | android:title="选择定位方式" | ||||
android:defaultValue="realtime" | android:defaultValue="realtime" | ||||
/> | /> | ||||
<EditTextPreference | |||||
android:dialogTitle="定位超时(毫秒) 0为不超时" | |||||
android:key="location_timeout" | |||||
android:summary="定位超时" | |||||
android:persistent="true" | |||||
android:title="设置定位超时" | |||||
android:inputType="number" | |||||
android:defaultValue="0" | |||||
/> | |||||
</PreferenceCategory> | </PreferenceCategory> | ||||
<PreferenceCategory | <PreferenceCategory | ||||
@@ -90,7 +99,7 @@ | |||||
android:persistent="true" | android:persistent="true" | ||||
android:title="设置定位距离" | android:title="设置定位距离" | ||||
android:inputType="number" | android:inputType="number" | ||||
android:defaultValue="1" | |||||
android:defaultValue="0" | |||||
/> | /> | ||||
<EditTextPreference | <EditTextPreference | ||||
android:dialogTitle="每次定位次数" | android:dialogTitle="每次定位次数" | ||||
@@ -107,6 +116,14 @@ | |||||
android:key="other" | android:key="other" | ||||
android:title="其他" | android:title="其他" | ||||
> | > | ||||
<SwitchPreference | |||||
android:title="控制台输出到logcat" | |||||
android:key="logcat_console_output" | |||||
android:persistent="true" | |||||
android:defaultValue="false" | |||||
android:summary="控制台输出到logcat" | |||||
/> | |||||
<Preference | <Preference | ||||
android:key="RESET_SETTINGS" | android:key="RESET_SETTINGS" | ||||
android:summary="重置所有设置为默认值" | android:summary="重置所有设置为默认值" | ||||