2017-06-13 86 views
1

我正在开发一个位置应用程序,该应用程序在除了Marshmallow之外的所有设备上都可以正常工作。我在运行时请求权限,并且当我授予权限经度和纬度不被提取,如果我去到设置和改变位置从高精度到节省电池,位置被提取和应用程序工作。我想位置被准确地提取。在给予权限请求后无法在棉花糖中获取位置

    ActivityCompat.requestPermissions(this, 
      new String[]{ 
        Manifest.permission.CAMERA, 
        android.Manifest.permission.ACCESS_FINE_LOCATION, 
        android.Manifest.permission.ACCESS_COARSE_LOCATION, 
        android.Manifest.permission.ACCESS_WIFI_STATE, 
        Manifest.permission.INTERNET, 
        Manifest.permission.WRITE_EXTERNAL_STORAGE, 
        Manifest.permission.READ_PHONE_STATE, 
        Manifest.permission.WAKE_LOCK, 
      }, 
      1); 

回答

-1

这是许可的问题

if (Build.VERSION.SDK_INT >= 23) { 

       if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, getActivity().getApplicationContext(), getActivity())) { 

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
         navigateToGoogleMap(); 
        } else { 
         showSettingsAlert(); 
        } 
       } else { 
        requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, PERMISSION_REQUEST_CODE, getActivity().getApplicationContext(), getActivity()); 
       } 
      } else { 

       if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
        navigateToGoogleMap(); 
       } else { 
        showSettingsAlert(); 
       } 

      } 
2

试试这个

第1步: - 加入manifiesr文件此权限

android.Manifest.permission.ACCESS_FINE_LOCATION, 
android.Manifest.permission.ACCESS_COARSE_LOCATION, 

第2步:问运行许可

String permission = android.Manifest.permission.ACCESS_FINE_LOCATION; 
      if (ActivityCompat.checkSelfPermission(SearchCityClass.this, permission) 
        != PackageManager.PERMISSION_GRANTED && ActivityCompat. 
        checkSelfPermission(SearchCityClass.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) 
        != PackageManager.PERMISSION_GRANTED) { 
       ActivityCompat.requestPermissions(SearchCityClass.this, new String[] 
         {permission}, PERMISSION_GPS_CODE); 

      } 

第3步:手柄permsiion结果

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
             @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (requestCode == PERMISSION_GPS_CODE) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 


      Toast.makeText(this, location_permission_granted_msg, Toast.LENGTH_SHORT).show(); 

     } else { 

      Toast.makeText(this, location_permission_not_granted_msg, Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 
1

你必须给像这样运行

if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == 
        PackageManager.PERMISSION_GRANTED && 
        ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == 
          PackageManager.PERMISSION_GRANTED) { 
        // Permission already Granted 
        //Do your work here 
//Perform operations here only which requires permission 
      } else { 
       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1); 
      } 

为Android 6时间许可,如果许可尚未授予覆盖onRequestPermission类似的结果

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
      if (requestCode == 1) { 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
          //Permission Granted 
          //Do your work here 
//Perform operations here only which requires permission 
       } 
      } 
     } 
0

添加该代码的Activity类

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_images); 

    requestLocationPermission(); 
    //your other codes 
} 

private void requestLocationPermission() { 

if (ContextCompat.checkSelfPermission(this, 
android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && 
       ContextCompat.checkSelfPermission(this, 
       android.Manifest.permission.ACCESS_COARSE_LOCATION) == 
       PackageManager.PERMISSION_GRANTED) { 

     } else { 
      ActivityCompat.requestPermissions(this, new String[] 
    { 
    Manifest.permission.ACCESS_FINE_LOCATION, 
    Manifest.permission.ACCESS_COARSE_LOCATION}, 1); 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 

    //Checking the request code of our request 
    //If permission is granted 
    if (requestCode == 1) { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      //Displaying a toast 
      Toast.makeText(this, "Permission granted now you can get the location", Toast.LENGTH_LONG).show(); 

      } else { 
      //Displaying another toast if permission is not granted 
      Toast.makeText(this, "Oops you just denied the permission", Toast.LENGTH_LONG).show(); 
      } 
} 

添加这对您的Mainfest XML

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>