1. 程式人生 > >Android定位失敗解決方法

Android定位失敗解決方法

在手機端使用獲取使用者定位,基本上是每個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中,判斷請求碼,開啟定位模式的設定介面;如果不設定,每次啟動應用還會繼續彈窗,提示使用者;

測試多個手機品牌,使用定位功能都沒有問題,到此問題解決;