2017-02-09 11 views
1

Я не в состоянии показать точное положение в карте Google выше 4.4.2 version.Still путать о том, где, чтобы добавить разрешение времени Run? Пожалуйста, помогитеНевозможно добавить Время выполнения Разрешение выше уровня API 23?

GpsLocation класс

public class GpsLocation extends Service implements LocationListener { 
    private final Context mContext; 
    // flag for GPS status 
    boolean isGPSEnabled = false; 
    // flag for network status 
    boolean isNetworkEnabled = false; 
    // flag for GPS status 
    boolean canGetLocation = false; 
    Location location; // location 
    double latitude; // latitude 
    double longitude; // longitude 
    double speed, direction; 
    // The minimum distance to change Updates in meters 
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 
    // The minimum time between updates in milliseconds 
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 
    // Declaring a Location Manager 
    protected LocationManager locationManager; 

    public GpsLocation(Context context) { 
     this.mContext = context; 
     getLocation(); 
    } 

    public Location getLocation() { 

     if (Build.VERSION.SDK_INT >= 23 && 
       ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
       ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     } 




     try { 
      locationManager = (LocationManager) mContext 
        .getSystemService(LOCATION_SERVICE); 
      // getting GPS status 
      isGPSEnabled = locationManager 
        .isProviderEnabled(LocationManager.GPS_PROVIDER); 
      // getting network status 
      isNetworkEnabled = locationManager 
        .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
      if (!isGPSEnabled && !isNetworkEnabled) { 
       // no network provider is enabled 
      } else { 
       this.canGetLocation = true; 
       // First get location from Network Provider 
       if (isNetworkEnabled) { 

        if (isGPSEnabled) { 




         locationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("Network", "Network"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 


       } 
       // if GPS Enabled get lat/long using GPS Services 



        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("GPS Enabled", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager 
            .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 



     return location; 
    } 

    /** 
    * Stop using GPS listener 
    * Calling this function will stop using GPS in your app 
    */ 
    public void stopUsingGPS() { 
     if (locationManager != null) { 
      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; 
      } 
      locationManager.removeUpdates(GpsLocation.this); 
     } 
    } 

    /** 
    * Function to get latitude 
    */ 
    public double getLatitude() { 
     if (location != null) { 
      latitude = location.getLatitude(); 
     } 
     // return latitude 
     return latitude; 
    } 

    /** 
    * Function to get longitude 
    */ 
    public double getLongitude() { 
     if (location != null) { 
      longitude = location.getLongitude(); 
     } 
     // return longitude 
     return longitude; 
    } 

    public double getSpeed() { 
     return speed; 
    } 

    public double getDirection() { 
     return direction; 
    } 

    /** 
    * Function to check GPS/wifi enabled 
    * 
    * @return boolean 
    */ 
    public boolean canGetLocation() { 
     return this.canGetLocation; 
    } 

    /** 
    * Function to show settings alert dialog 
    * On pressing Settings button will launch Settings Options 
    */ 
    public void showSettingsAlert() { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 
     // Setting Dialog Title 
     alertDialog.setTitle("GPS is settings"); 
     // Setting Dialog Message 
     alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 
     // On pressing Settings button 
     alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       mContext.startActivity(intent); 
      } 
     }); 
     // on pressing cancel button 
     alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     // Showing Alert Message 
     alertDialog.show(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     if (location != null) { 
      speed = location.getSpeed(); 
      direction = location.getBearing(); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 
} 

NearMe класс

public class NearMe extends Fragment { 
    MapView mMapView; 
    private GoogleMap googleMap; 
    GpsLocation gpsLocation; 
    double longitude, latitude; 
    private ProgressDialog pDialog; 
    ArrayList<MySchool> al_school = new ArrayList<MySchool>(); 
    ArrayList<MyCollege> al_college = new ArrayList<MyCollege>(); 
    ArrayList<MyUniversity> al_university = new ArrayList<MyUniversity>(); 

    private static final String TAG = NearMe.class.getSimpleName(); 

    private static final String urlSchool = "http://www.**.com/api/v1/schools"; 
    private static final String urlCollege = "http://www.**.com/api/v1/colleges"; 
    private static final String urlUniversity = "http://www.**.com/api/v1/universities"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     final View v = inflater.inflate(R.layout.fragment_near_me, container, false); 

     final LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 


     if (isConnected()) { 
      if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
       Toast.makeText(getContext(), "GPS is Enabled in your device", Toast.LENGTH_SHORT).show(); 

       mMapView = (MapView) v.findViewById(R.id.mapView); 
       mMapView.onCreate(savedInstanceState); 

       mMapView.onResume(); 

       try { 
        MapsInitializer.initialize(getActivity().getApplicationContext()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       gpsLocation = new GpsLocation(getContext()); 


       if (gpsLocation.canGetLocation()) { 
        longitude = gpsLocation.getLongitude(); 
        latitude = gpsLocation.getLatitude(); 

        Toast.makeText(getContext(), "latitude:" + latitude + "Longitude:" + longitude, Toast.LENGTH_LONG).show(); 
       } 


       pDialog = new ProgressDialog(getContext()); 
       pDialog.setMessage("Loading…"); 
       pDialog.show(); 


       mMapView.getMapAsync(new OnMapReadyCallback() { 
        @Override 
        public void onMapReady(GoogleMap mMap) { 
         googleMap = mMap; 

         CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLng(new LatLng(gpsLocation.getLatitude(), gpsLocation.getLongitude())); 
         CameraUpdate zoom = CameraUpdateFactory.zoomTo(14); 
         mMap.moveCamera(cameraUpdate); 
         mMap.animateCamera(zoom); 

         // mMap.animateCamera(cameraUpdate); 


         // LatLng schoollatlng = new LatLng(latitude, longitude); 
         // googleMap.addMarker(new MarkerOptions().position(schoollatlng).title("MyLocation")); 
         // CameraPosition cameraPosition = new CameraPosition.Builder().target(schoollatlng).zoom(11).build(); 
         // googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
         // googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(gpsLocation.getLatitude(), gpsLocation.getLongitude()), 14.0f)); 

         drawSchoolMarker(); 
         drawCollegeMarker(); 
         drawUniversityMarker(); 
        } 
       }); 
      } else { 
       showGPSDisabledAlertToUser(); 
      } 
     } else { 

      Toast.makeText(getContext(), "Please check your internet connection", Toast.LENGTH_LONG).show(); 
     } 

     return v; 
    } 

    public boolean isConnected() { 
     ConnectivityManager connMgr = (ConnectivityManager) getActivity().getSystemService(Activity.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
     if (networkInfo != null && networkInfo.isConnected()) 
      return true; 
     else 
      return false; 
    } 

    private void hidePDialog() { 
     if (pDialog != null) { 
      pDialog.dismiss(); 
      pDialog = null; 
     } 
    } 

    private void drawSchoolMarker() { 

     JsonArrayRequest schoolRequest = new JsonArrayRequest(urlSchool, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 

         hidePDialog(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           MySchool school = new MySchool(); 

           school.setId(obj.getInt("id") + " "); 
           school.setName(obj.getString("name")); 
           if (obj.getString("latitude") == "null") { 
            school.setLatitude(Double.parseDouble("27.6712")); 
           } else { 
            school.setLatitude(Double.parseDouble(obj.getString("latitude"))); 
           } 

           if (obj.getString("longitude") == "null") { 
            school.setLongitude(Double.parseDouble("85.2865")); 
           } else { 
            school.setLongitude(Double.parseDouble(obj.getString("longitude"))); 
           } 

           al_school.add(school); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 

         //iterate from arraylist 
         for (MySchool schoolItr : al_school) { 

          View marker = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker, null); 
          TextView numTxt = (TextView) marker.findViewById(R.id.num_txt); 
          numTxt.setText(schoolItr.getName()); 
          LatLng latlng = new LatLng(schoolItr.getLatitude(), schoolItr.getLongitude()); 
          googleMap.addMarker(new MarkerOptions().position(latlng).icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(getContext(), marker))).title(schoolItr.getName())); 
         } 

        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hidePDialog(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(schoolRequest); 
    } 

    private void drawCollegeMarker() { 
     JsonArrayRequest collegeRequest = new JsonArrayRequest(urlCollege, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 

         hidePDialog(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           MyCollege college = new MyCollege(); 

           college.setId("" + obj.getInt("id")); 
           college.setName("" + obj.getString("name")); 
           //college.setLatitude(Double.parseDouble("" + obj.getDouble("latitude"))); 
           //college.setLongitude(Double.parseDouble("" + obj.getDouble("longitude"))); 
           if (obj.getString("latitude") == "null") { 

            college.setLatitude(Double.parseDouble("27.6712")); 
           } else { 

            college.setLatitude(Double.parseDouble(obj.getString("latitude"))); 
           } 

           if (obj.getString("longitude") == "null") { 
            college.setLongitude(Double.parseDouble("27.6712")); 
           } else { 
            college.setLongitude(Double.parseDouble(obj.getString("longitude"))); 

           } 

           al_college.add(college); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 

         //iterate from arraylist 
         for (MyCollege collegeItr : al_college) { 

          View marker = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_college, null); 
          TextView numTxt = (TextView) marker.findViewById(R.id.txt_college); 
          numTxt.setText(collegeItr.getName()); 
          LatLng latlng = new LatLng(collegeItr.getLatitude(), collegeItr.getLongitude()); 
          googleMap.addMarker(new MarkerOptions().position(latlng).icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(getContext(), marker))).title(collegeItr.getName())); 
         } 


        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hidePDialog(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(collegeRequest); 
    } 

    private void drawUniversityMarker() { 
     JsonArrayRequest uniRequest = new JsonArrayRequest(urlUniversity, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 

         hidePDialog(); 

         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 

           JSONObject obj = response.getJSONObject(i); 
           MyUniversity university = new MyUniversity(); 

           university.setId("" + obj.getInt("id")); 
           university.setName("" + obj.getString("name")); 
           //university.setLatitude(Double.parseDouble("" + obj.getDouble("latitude"))); 
           //university.setLongitude(Double.parseDouble("" + obj.getDouble("longitude"))); 
           if (obj.getString("latitude") == "null") { 

            university.setLatitude(Double.parseDouble("27.6712")); 
           } else { 

            university.setLatitude(Double.parseDouble(obj.getString("latitude"))); 
           } 

           if (obj.getString("longitude") == "null") { 
            university.setLongitude(Double.parseDouble("27.6712")); 
           } else { 
            university.setLongitude(Double.parseDouble(obj.getString("longitude"))); 

           } 

           al_university.add(university); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 

         //iterate from arraylist 
         for (MyUniversity universityItr : al_university) { 

          View marker = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_university, null); 
          TextView numTxt = (TextView) marker.findViewById(R.id.txt_university); 
          numTxt.setText(universityItr.getName()); 
          LatLng latlng = new LatLng(universityItr.getLatitude(), universityItr.getLongitude()); 
          googleMap.addMarker(new MarkerOptions().position(latlng).icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(getContext(), marker))).title(universityItr.getName())); 

         } 


        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hidePDialog(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(uniRequest); 
    } 

    public static Bitmap createDrawableFromView(Context context, View view) { 
     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
     view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); 
     view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); 
     view.buildDrawingCache(); 
     Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

     Canvas canvas = new Canvas(bitmap); 
     view.draw(canvas); 

     return bitmap; 
    } 

    private void showGPSDisabledAlertToUser() { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); 
     alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?") 
       .setCancelable(false) 
       .setPositiveButton("Goto Settings Page To Enable GPS", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           Intent callGPSSettingIntent = new Intent(
             android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
           startActivity(callGPSSettingIntent); 
          } 
         }); 
     alertDialogBuilder.setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 
     AlertDialog alert = alertDialogBuilder.create(); 
     alert.show(); 
    } 
} 

Где находится точная проблема? и почему карта не отображается и выше SDK 23 ?? версия

+0

какая ошибка вы получаете? – d1vivek681065

+0

Попробуйте эту ссылку, это может помочь вам http://stackoverflow.com/questions/34342816/android-6-0-multiple-permissions –

+0

На данный момент я могу просто сказать, что вы просто проверяете разрешение, если оно не предоставлено. Где вы запрашиваете их? Вы должны сделать это в действии до того, как получите доступ к методу getLocation вашего сервиса. – d1vivek681065

ответ

1

Попробуйте добавить этот кусок кода:

if (Build.VERSION.SDK_INT >= 23 && 
     ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
     ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

    // this says , Permissions are not granted , so ask for permissions here if not granted and look out for permission callback if user grants 
} 
+0

, где я должен добавить это? если (ContextCompat.checkSelfPermission (thisActivity, Manifest.permission.READ_CONTACTS) ! = PackageManager.PERMISSION_GRANTED) { // Если мы покажем объяснение? если (ActivityCompat.shouldShowRequestPermissionRationale (thisActivity, Manifest.permission.READ_CONTACTS)) { } еще { ActivityCompat.requestPermissions (thisActivity, новые String [] {} Manifest.permission.READ_CONTACTS, MY_PERMISSIONS_REQUEST_READ_CONTACTS); } } – seon

1

Код, который вы, вероятно, скопировано откуда-то ясно даже есть комментарий о том, как это сделать.

Вы только check разрешений, но вы никогда запрос их. Поэтому у вас никогда не будет разрешения на размещение.

Смотрите Android документацию для получения дополнительной информации о ActivityCompat.requestPermissions()

+0

, где я должен реализовать разрешения на запрос? – seon

+0

@seon Пожалуйста, прочитайте код, который вы скопировали. Об этом четко сказано. Хотя даже это не в том месте. Не копируйте случайный код, если вы не знаете, что он делает. Вы попадете в беду. Просто прочитайте документацию, и она объяснит, что делать и где. –

+0

Я знаю, что мне нужно добавить разрешение? но не знаю, где я должен его разместить? поэтому его сбивает с толку – seon

1

Вы можете запросить разрешение на следующий код

if(Build.VERSION.SDK_INT >= 23) 
      if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       if (ActivityCompat.shouldShowRequestPermissionRationale(MenuActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)) { 
        // permission wasn't granted 
       } else { 
        ActivityCompat.requestPermissions(MenuActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_PERMISSION); 
       } 
       if (ActivityCompat.shouldShowRequestPermissionRationale(MenuActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)) { 
        // permission wasn't granted 
       } else { 
        ActivityCompat.requestPermissions(MenuActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE_PERMISSIONN); 
       } 
      } 
@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     if (requestCode == REQUEST_CODE_PERMISSION) { 
      if (grantResults.length >= 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // permission was granted 
      } else { 
       // permission wasn't granted 
      } 
     } 
     if (requestCode == REQUEST_CODE_PERMISSIONN) { 
      if (grantResults.length >= 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // permission was granted 
      } else { 
       // permission wasn't granted 
      } 
     } 
    } 

Добавить следующие атрибуты манифеста

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-feature android:name="android.hardware.location.gps" /> 
+0

. Я упомянула об этом http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/. поэтому, когда я должен добавить это? можете ли вы подробно рассказать – seon

+0

, чтобы отобразить карту, вы создаете проект на https://console.developers.google.com/apis/library и [создать учетные данные] – Harmantj

+0

да. отображается в более низкой версии, но не в более высоком – seon

1

Над уровнем API 23 вам будет дано разрешение прагматично, как:

Изменение разрешения SEND_SMS на ваша карта разрешение Google

private static final int PERMISSION_REQUEST_CODE = 1; 

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 

if (checkSelfPermission(Manifest.permission.SEND_SMS) 
     == PackageManager.PERMISSION_DENIED) { 

    Log.d("permission", "permission denied to SEND_SMS - requesting it"); 
    String[] permissions = {Manifest.permission.SEND_SMS}; 

    requestPermissions(permissions, PERMISSION_REQUEST_CODE); 

} 

}

+0

, как проверить ответ данного разрешения, как разрешение предоставлено или нет :) – user7176550

+0

для этого вы должны использовать метод переопределения OnRequestPermissionResult –

+0

ok спасибо :) – user7176550

0

В методе getLocation.


public Location getLocation() { 

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

      ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE); 
    } 
//Do your thing 
} 

И слушать Разрешаю или Отказано переопределить функцию onRequestPermissionsResult() в вашей деятельности/Fragment как этот


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

также метод вы используете, кажется, немного стары.Пожалуйста, извлекаете эту ссылку https://developer.android.com/training/location/receive-location-updates.html

0

Когда getLocation() Methode звонки и всегда проверять разрешения в соответствии с вашим кодом здесь

if (Build.VERSION.SDK_INT >= 23 && 
      ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
      ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

    } 

если разрешение не называемые средства в файле манифеста вы не упоминаете необходимые разрешения это может быть первое место проверки, если разрешение не дало ему разрешения запроса обыкновения вызова

Изменен я только что проверил, что если вы не упоминаете разрешения на Manifest файл он не будет просить разрешения

Оба будут объединены и попросить одного разрешения

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> Добавить два разрешения на Manifest файл

Добавьте этот код в getLocation() метод начиная

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { 
     if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
       ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions((MainActivity.this), new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, REQ_PERMISSION_CODE); 
      return; 
     } 
    } 

это до тех пор, пока не будет разрешен метод, который не выполняется

* pardon my English

+0

не могли бы вы предоставить некоторую уединенную ссылку – seon

+0

я могу дать вам код ссылки, я не знаю –

 Смежные вопросы

  • Нет связанных вопросов^_^