diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index f01066622fa9e4f7ebf97a1e511f85e5c02e1275..362515e98f5818675a9ad7660fa6fc971a124680 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/README.md b/README.md index bf379ae34c990e78c791488d4b4a5b9eaeba0f5f..86b5f2285d4a16fc54c740b3891cddd617806b8f 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,11 @@ Version 1.9.5测试版 3.删除了获取IMEI的权限 - 4.增加运行日志记录,目录为 你的手机/MockGPS/Log/xxx.log,这个是为了方便bug反馈和调试。有好几个人反应说定位来回跳,但我死活重现不了。所以加上这个运行日志记录,看看能不能找到问题在哪。但是我还没服务器,这个log文件怎么传给我还没想好,先改这些吧有空再说 + 4.修改EMUI9.1的存储权限获取bug(然后我想到如果不给存储权限的话,这个app就直接崩了...) + + 5.增强了一下稳定性???我也不是很确定,不太好测试 + + 6.增加运行日志记录,目录为 你的手机/MockGPS/Log/xxx.log,这个是为了方便bug反馈和调试。有好几个人反应说定位来回跳,但我死活重现不了。所以加上这个运行日志记录,看看能不能找到问题在哪。但是我还没服务器,这个log文件怎么传给我还没想好,先改这些吧有空再说 Version 1.9.4 diff --git a/app/release/MockGPS_v1.9.5.190508_alpha.apk b/app/release/MockGPS_v1.9.5.190508_alpha.apk deleted file mode 100644 index 098a633adb703226e33f4a6d6deea5a0cfe5ce21..0000000000000000000000000000000000000000 Binary files a/app/release/MockGPS_v1.9.5.190508_alpha.apk and /dev/null differ diff --git a/app/src/main/java/com/example/mockgps/MainActivity.java b/app/src/main/java/com/example/mockgps/MainActivity.java index 871c2745036175891eac32ad2ee198587cf11210..20f163c5ca93f43b7417e1cb69e9826378a3fe63 100644 --- a/app/src/main/java/com/example/mockgps/MainActivity.java +++ b/app/src/main/java/com/example/mockgps/MainActivity.java @@ -211,7 +211,12 @@ public class MainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { - LogUtil.configLog(); + try{ + LogUtil.configLog(); + }catch (Exception e){ + e.printStackTrace(); + } + //Logger log = Logger.getLogger(MainActivity.class); Log.d("PROGRESS", "onCreate"); log.debug("PROGRESS: onCreate"); @@ -1429,9 +1434,12 @@ public class MainActivity extends AppCompatActivity * 读写权限和电话状态权限非必要权限(建议授予)只会申请一次,用户同意或者禁止,只会弹一次 */ // 读写权限 - if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } +// if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; +// } // 读取电话状态权限 // if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) { // permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n"; diff --git a/app/src/main/java/com/example/mockgps/StartActivity.java b/app/src/main/java/com/example/mockgps/StartActivity.java index 6e1e42c23274baee98b4eced24c3ed0e2e5e05ae..8514ad00982f805e1c3ea9a911549112bb2d0131 100644 --- a/app/src/main/java/com/example/mockgps/StartActivity.java +++ b/app/src/main/java/com/example/mockgps/StartActivity.java @@ -85,9 +85,12 @@ public class StartActivity extends AppCompatActivity { * 读写权限和电话状态权限非必要权限(建议授予)只会申请一次,用户同意或者禁止,只会弹一次 */ // 读写权限 - if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; + if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } +// if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; +// } // 读取电话状态权限 // if (addPermission(permissions, Manifest.permission.READ_PHONE_STATE)) { // permissionInfo += "Manifest.permission.READ_PHONE_STATE Deny \n"; diff --git a/app/src/main/java/com/example/service/MockGpsService.java b/app/src/main/java/com/example/service/MockGpsService.java index c33d106be3b7bcf70ae895dc6ed5f6138acde2b2..965182da09c1f93cff89c23814d99fb635dc2501 100644 --- a/app/src/main/java/com/example/service/MockGpsService.java +++ b/app/src/main/java/com/example/service/MockGpsService.java @@ -32,6 +32,7 @@ import com.example.mockgps.R; import org.apache.log4j.Logger; +import java.util.List; import java.util.UUID; public class MockGpsService extends Service { @@ -43,18 +44,18 @@ public class MockGpsService extends Service { private HandlerThread handlerThread; private Handler handler; - private boolean isStop=true; + private boolean isStop = true; //经纬度字符串 - private String latLngInfo="104.06121778639009&30.544111926165282"; + private String latLngInfo = "104.06121778639009&30.544111926165282"; //悬浮窗 private FloatWindow floatWindow; - private boolean isFloatWindowStart=false; + private boolean isFloatWindowStart = false; - public static final int RunCode=0x01; - public static final int StopCode=0x02; + public static final int RunCode = 0x01; + public static final int StopCode = 0x02; //log debug private static Logger log = Logger.getLogger(MockGpsService.class); @@ -70,31 +71,31 @@ public class MockGpsService extends Service { public void onCreate() { LogUtil.configLog(); Log.d(TAG, "onCreate"); - log.debug(TAG+ ": onCreate"); + log.debug(TAG + ": onCreate"); super.onCreate(); + locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); - locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); - + //for test + getProviders(); //remove default network location provider - rmNetworkProvider(); - - //add a new network location provider - setNewNetworkProvider(); - + rmNetworkTestProvider(); + //remove gps provider + rmGPSTestProvider(); -// rmGPSProvider(); -// setGPSProvider(); - //setGPSProvider(); + //add a new test network location provider + setNetworkTestProvider(); +// add a GPS test Provider + setGPSTestProvider(); //thread - handlerThread=new HandlerThread(getUUID(),-2); + handlerThread = new HandlerThread(getUUID(), -2); handlerThread.start(); - handler=new Handler(handlerThread.getLooper()){ - public void handleMessage(Message msg){ + handler = new Handler(handlerThread.getLooper()) { + public void handleMessage(Message msg) { try { - Thread.sleep(333); - if (!isStop){ + Thread.sleep(128); + if (!isStop) { //remove default network location provider //rmNetworkProvider(); @@ -102,10 +103,11 @@ public class MockGpsService extends Service { //add a new network location provider //setNewNetworkProvider(); - setNetworkLocation(); + setTestProviderLocation(); + setGPSLocation(); sendEmptyMessage(0); //broadcast to MainActivity - Intent intent=new Intent(); + Intent intent = new Intent(); intent.putExtra("statusCode", RunCode); intent.setAction("com.example.service.MockGpsService"); sendBroadcast(intent); @@ -113,7 +115,7 @@ public class MockGpsService extends Service { } catch (InterruptedException e) { e.printStackTrace(); Log.d(TAG, "handleMessage error"); - log.debug(TAG+ ": handleMessage error"); + log.debug(TAG + ": handleMessage error"); Thread.currentThread().interrupt(); } } @@ -125,19 +127,19 @@ public class MockGpsService extends Service { public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d(TAG, "onStart"); - log.debug(TAG+ ": onStart"); + log.debug(TAG + ": onStart"); } @RequiresApi(api = Build.VERSION_CODES.O) @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand"); - log.debug(TAG+ ": onStartCommand"); + log.debug(TAG + ": onStartCommand"); // DisplayToast("Mock Location Service Start"); // String channelId = "channel_01"; - String name="channel_name"; + String name = "channel_name"; NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notification = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -160,26 +162,24 @@ public class MockGpsService extends Service { .setChannelId(channelId);//无效 notification = notificationBuilder.build(); } - startForeground(1,notification); + startForeground(1, notification); // //get location info from mainActivity - latLngInfo=intent.getStringExtra("key"); - Log.d(TAG, "dataFromMain is "+latLngInfo); - log.debug(TAG+ ": dataFromMain is "+latLngInfo); + latLngInfo = intent.getStringExtra("key"); + Log.d(TAG, "DataFromMain is " + latLngInfo); + log.debug(TAG + ": DataFromMain is " + latLngInfo); //start to refresh location - isStop=false; + isStop = false; //这里开启悬浮窗 - if (!isFloatWindowStart){ - floatWindow=new FloatWindow(this); + if (!isFloatWindowStart) { + floatWindow = new FloatWindow(this); floatWindow.showFloatWindow(); - isFloatWindowStart=true; + isFloatWindowStart = true; } - - // return START_STICKY; return super.onStartCommand(intent, flags, startId); } @@ -187,25 +187,28 @@ public class MockGpsService extends Service { @Override public void onDestroy() { Log.d(TAG, "onDestroy"); - log.debug(TAG+ ": onDestroy"); + log.debug(TAG + ": onDestroy"); // Toast.makeText(this, "Service destroyed", Toast.LENGTH_SHORT).show(); // DisplayToast("Mock Loction Service finish"); - isStop=true; + isStop = true; //移除悬浮窗 floatWindow.hideFloatWindow(); - isFloatWindowStart=false; + isFloatWindowStart = false; handler.removeMessages(0); handlerThread.quit(); - rmNetworkProvider(); + + //remove test provider + rmNetworkTestProvider(); + rmGPSTestProvider(); //rmGPSProvider(); stopForeground(true); //broadcast to MainActivity - Intent intent=new Intent(); + Intent intent = new Intent(); intent.putExtra("statusCode", StopCode); intent.setAction("com.example.service.MockGpsService"); sendBroadcast(intent); @@ -213,6 +216,14 @@ public class MockGpsService extends Service { super.onDestroy(); } + //provider test + public void getProviders() { + List providerList = locationManager.getProviders(true); + for (String str : providerList) { + Log.d("PROV", str); + log.debug("active provider: " + str); + } + } //generate a location public Location generateLocation(LatLng latLng) { @@ -240,12 +251,12 @@ public class MockGpsService extends Service { return loc; } - //set network location - private void setNetworkLocation() { + //给test provider添加网络定位 + private void setTestProviderLocation() { //default location 30.5437233 104.0610342 成都长虹科技大厦 - Log.d(TAG, "setNetworkLocation: "+latLngInfo); - log.debug(TAG+ ": setNetworkLocation: "+latLngInfo); - String latLngStr[]=latLngInfo.split("&"); + Log.d(TAG, "setNetworkLocation: " + latLngInfo); + log.debug(TAG + ": setNetworkLocation: " + latLngInfo); + String latLngStr[] = latLngInfo.split("&"); LatLng latLng = new LatLng(Double.valueOf(latLngStr[1]), Double.valueOf(latLngStr[0])); String providerStr = LocationManager.NETWORK_PROVIDER; // String providerStr2 = LocationManager.GPS_PROVIDER; @@ -256,71 +267,107 @@ public class MockGpsService extends Service { // locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, generateLocation(latLng)); } catch (Exception e) { Log.d(TAG, "setNetworkLocation error"); - log.debug(TAG+ ": setNetworkLocation error"); + log.debug(TAG + ": setNetworkLocation error"); + e.printStackTrace(); + } + } + + //set gps location + private void setGPSLocation(){ + //default location 30.5437233 104.0610342 成都长虹科技大厦 + Log.d(TAG, "setGPSLocation: " + latLngInfo); + log.debug(TAG + ": setGPSLocation: " + latLngInfo); + String latLngStr[] = latLngInfo.split("&"); + LatLng latLng = new LatLng(Double.valueOf(latLngStr[1]), Double.valueOf(latLngStr[0])); + String providerStr = LocationManager.GPS_PROVIDER; +// String providerStr2 = LocationManager.GPS_PROVIDER; + try { + locationManager.setTestProviderLocation(providerStr, generateLocation(latLng)); +// locationManager.setTestProviderLocation(providerStr2, generateLocation(latLng)); + //for test +// locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, generateLocation(latLng)); + } catch (Exception e) { + Log.d(TAG, "setGPSLocation error"); + log.debug(TAG + ": setGPSLocation error"); e.printStackTrace(); } } //remove network provider - private void rmNetworkProvider(){ + private void rmNetworkTestProvider() { try { - for(int i=0;i<3;i++){ + for (int i = 0; i < 3; i++) { String providerStr = LocationManager.NETWORK_PROVIDER; - if (locationManager.isProviderEnabled(providerStr)){ - Log.d(TAG, "now remove NetworkProvider: "+i); - log.debug(TAG+ ": now remove NetworkProvider: "+i); + if (locationManager.isProviderEnabled(providerStr)) { + Log.d(TAG, "now remove NetworkProvider: try_" + i); + log.debug(TAG + ": now remove NetworkProvider: try_" + i); // locationManager.setTestProviderEnabled(providerStr,true); locationManager.removeTestProvider(providerStr); - }else{ - Log.d(TAG, "NetworkProvider is not enabled: "+i); - log.debug(TAG+ ": NetworkProvider is not enabled: "+i); + } else { + Log.d(TAG, "NetworkProvider is not enabled: try_" + i); + log.debug(TAG + ": NetworkProvider is not enabled: try_" + i); } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); Log.d(TAG, "rmNetworkProvider error"); - log.debug(TAG+ ": rmNetworkProvider error"); + log.debug(TAG + ": rmNetworkProvider error"); } } //set new network provider - private void setNewNetworkProvider(){ + private void setNetworkTestProvider() { String providerStr = LocationManager.NETWORK_PROVIDER; +// String providerStr = LocationManager.GPS_PROVIDER; try { locationManager.addTestProvider(providerStr, false, false, false, false, false, false, false, 1, Criteria.ACCURACY_FINE); - Log.d(TAG,"addTestProvider[network] success"); - log.debug(TAG+": addTestProvider[network] success"); + Log.d(TAG, "addTestProvider[NETWORK_PROVIDER] success"); + log.debug(TAG + ": addTestProvider[NETWORK_PROVIDER] success"); // locationManager.setTestProviderStatus("network", LocationProvider.AVAILABLE, null, // System.currentTimeMillis()); - }catch (SecurityException e){ - Log.d(TAG,"setNewNetworkProvider error"); - log.debug(TAG+": setNewNetworkProvider error"); + } catch (SecurityException e) { + e.printStackTrace(); + Log.d(TAG, "addTestProvider[NETWORK_PROVIDER] error"); + log.debug(TAG + ": addTestProvider[NETWORK_PROVIDER] error"); } - if (!locationManager.isProviderEnabled(providerStr)){ - Log.d(TAG, "now setTestProviderEnabled[network]"); - log.debug(TAG+ ": now setTestProviderEnabled[network]"); - locationManager.setTestProviderEnabled(providerStr,true); + if (!locationManager.isProviderEnabled(providerStr)) { + try { + locationManager.setTestProviderEnabled(providerStr, true); + } catch (Exception e) { + e.printStackTrace(); + Log.d(TAG, "setTestProviderEnabled[NETWORK_PROVIDER] error"); + log.debug(TAG + ": setTestProviderEnabled[NETWORK_PROVIDER] error"); + } } } // for test: set GPS provider - private void rmGPSProvider(){ + private void rmGPSTestProvider() { try { - String providerStr = LocationManager.GPS_PROVIDER; - if (locationManager.isProviderEnabled(providerStr)){ - Log.d(TAG, "now remove GPSProvider"); + for (int i = 0; i < 3; i++) { + String providerStr = LocationManager.GPS_PROVIDER; + if (locationManager.isProviderEnabled(providerStr)) { + Log.d(TAG, "now remove GPSProvider: try_" + i); + log.debug(TAG + ": now remove GPSProvider: try_" + i); // locationManager.setTestProviderEnabled(providerStr,true); - locationManager.removeTestProvider(providerStr); + locationManager.removeTestProvider(providerStr); + } else { + Log.d(TAG, "GPSProvider is not enabled: try_" + i); + log.debug(TAG + ": GPSProvider is not enabled: try_" + i); + } } - }catch (Exception e){ + + } catch (Exception e) { e.printStackTrace(); Log.d(TAG, "rmGPSProvider error"); + log.debug(TAG + ": rmGPSProvider error"); } } - private void setGPSProvider(){ + + private void setGPSTestProvider() { LocationProvider provider = locationManager.getProvider(LocationManager.GPS_PROVIDER); // if (provider != null) { // locationManager.addTestProvider( @@ -335,12 +382,28 @@ public class MockGpsService extends Service { // , provider.getPowerRequirement() // , provider.getAccuracy()); // } else { + try { locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, true, true, false, true, true, true, 0, 5); + Log.d(TAG, "addTestProvider[GPS_PROVIDER] success"); + log.debug(TAG + ": addTestProvider[GPS_PROVIDER] success"); + }catch (Exception e){ + e.printStackTrace(); + Log.d(TAG, "addTestProvider[GPS_PROVIDER] error"); + log.debug(TAG + ": addTestProvider[GPS_PROVIDER] error"); + } + // } -// if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ - locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true); -// } + if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { + try { + locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true); + }catch (Exception e){ + e.printStackTrace(); + Log.d(TAG, "setTestProviderEnabled[GPS_PROVIDER] error"); + log.debug(TAG + ": setTestProviderEnabled[GPS_PROVIDER] error"); + } + + } //新