2016-05-20 3 views
0

このコードはHTC One m8で動作しますが、他のデバイスでは動作しません。LocationServices.FusedLocationApi.getLastLocationはSamsungの携帯電話ネットワークでは機能しません

private Location getLocation() { 
     // If Google Play Services is available 
     if (servicesConnected()) { 
      // Get the current location 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       // TODO: Consider calling 
       // ActivityCompat#requestPermissions 
       // here to request the missing permissions, and then overriding 
       // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
       //           int[] grantResults) 
       // to handle the case where the user grants the permission. See the documentation 
       // for ActivityCompat#requestPermissions for more details. 
      } 
      return LocationServices.FusedLocationApi.getLastLocation(GoogleApiClient); 

     } else{ 
      return null; 
     } 

    } 

私はACCESS_COARSE_LOCATIONの許可が受け入れられるかどうかわかりません。ここに私の許可リストコード

private void insertDummyContactWrapper() { 
     List<String> permissionsNeeded = new ArrayList<String>(); 

     final List<String> permissionsList = new ArrayList<String>(); 
     if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION) && !addPermission(permissionsList,Manifest.permission.ACCESS_COARSE_LOCATION)) 
      permissionsNeeded.add("Location"); 
     if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS) && !addPermission(permissionsList,Manifest.permission.WRITE_CONTACTS)) 
      permissionsNeeded.add("Contacts"); 
     if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE) && !addPermission(permissionsList,Manifest.permission.WRITE_EXTERNAL_STORAGE)) 
      permissionsNeeded.add("Storage"); 

     if (permissionsList.size() > 0) { 
      if (permissionsNeeded.size() > 0) { 
       // Need Rationale 
       String message = "You need to grant access to " + permissionsNeeded.get(0); 
       for (int i = 1; i < permissionsNeeded.size(); i++) 
        message = message + ", " + permissionsNeeded.get(i); 
       showMessageOKCancel(message, 
         new DialogInterface.OnClickListener() { 
          @TargetApi(Build.VERSION_CODES.M) 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), 
             REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
          } 
         }); 
       return; 
      } 
      requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), 
        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
      return; 
     } 
    } 

それはGPSをオンにすると位置を取得しますが、GPSが利用できない場合、それはサムスンのデバイス上でクラッシュしています。 ACCESS_COARSE_LOCATIONの許可がユーザーから受け入れられるかどうかを知りたいだけでした。

答えて

0

あなたはNETWORK_PROVIDERから粗い位置を得るために、そのようなものを使用することができます。

LocationManager locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); 

boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

// get location from Network Provider 
if (isNetworkEnabled) { 
    locationManager.requestLocationUpdates(
      LocationManager.NETWORK_PROVIDER, 
      MIN_TIME_BW_UPDATES, 
      MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

    Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
} 

あなたがGPS_PROVIDERのためにできることと同じこと:あなたはすべての必要な権限を設定する必要があり

もちろん
boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

// the same action here 

+0

Samsungデバイスでは動作しませんでした。 SamsungのデバイスがLocationListenerで動作しないのですか? – Savita

関連する問題