Android定位失敗解決方法
阿新 • • 發佈:2018-12-15
在手機端使用獲取使用者定位,基本上是每個APP應用必做的事情;所以,如何獲取定位,是開發人員最基本的問題;
最近處理Android應用的時候,測試反饋說,有的手機不能使用定位功能;下面來總結一下,自己測試後不能使用定位功能的原因:
1、手機定位功能沒有開啟,所有APP都不能使用定位功能;
2、定位模式,定位模式分為:GPS定位,網路定位(WIFI/2G/3G),高度精確定位(GPS以及網路定位);這裡要注意,如果你的APP有申請定位許可權,但是同你開啟的定位模式不同,一樣是不能使用定位功能
3、APP應用沒有使用定位的許可權;
所有Android手機,出現不能使用定位的問題基本上都是以上三點;平常開發時,關注的是許可權,基本上是忽略了第2點;開啟手機設定,調整以上三點後,問題解決。
下面貼一下程式碼:
在專案入口檔案,MainActivity.java 新增程式碼:
private LocationManager locationManager; private String provider; //是否為網路位置控制器 //當前可用的位置控制器 List<String> list; @SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //獲取定位服務 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //獲取當前可用的位置控制器 list = locationManager.getProviders(true); boolean flag = false; //檢查是否打開了GPS或網路定位 if (list.contains(LocationManager.GPS_PROVIDER)) { //是否為GPS位置控制器 flag = true; } else { flag = false; } if (list.contains(LocationManager.NETWORK_PROVIDER)) { //是否為網路位置控制器 flag = true; } else { flag = false; } if(!flag) { Toast.makeText(this, "請檢查網路或GPS是否開啟", Toast.LENGTH_LONG).show(); requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 100); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Toast.makeText(this, "onRequestPermissionsResult被呼叫!", Toast.LENGTH_SHORT).show(); doNext(requestCode,permissions, grantResults); } private void doNext(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 100) { if(!list.contains(LocationManager.GPS_PROVIDER) || !list.contains(LocationManager.NETWORK_PROVIDER)){ final AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("GPS設定"); dialog.setMessage("人事考勤需要使用當前位置,請先開啟定位設定"); dialog.setPositiveButton("設定", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // 轉到手機設定介面,使用者設定GPS Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); Toast.makeText(Util.context, "開啟後退出,直接點選返回鍵即可;若不開啟返回下次將再次出現", Toast.LENGTH_LONG).show(); startActivityForResult(intent, 0); // 設定完成後返回到原來的介面 } }); dialog.setNeutralButton("取消", new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); dialog.show(); } } }
onCreate中,首先應用請求定位許可權,我這裡使用的是高度精確許可權;
requestPermissions回撥函式onRequestPermissionsResult中,判斷請求碼,開啟定位模式的設定介面;如果不設定,每次啟動應用還會繼續彈窗,提示使用者;
測試多個手機品牌,使用定位功能都沒有問題,到此問題解決;