2017-06-13 33 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"/>