2017-10-12 5 views
0

J'ai testé mon application sur beaucoup de téléphones et cela fonctionne bien et affiche la carte correctement, mais il ne s'affiche pas sur certains appareils. Il est très étrange que les appareils qui n'affichent pas la carte fonctionnent correctement dans d'autres applications utilisant des cartes. Je veux dire, que les appareils montre la carte et fonctionne très bien dans d'autres applications/android - google map ne s'affiche pas sur certains appareils

voici mon code:

public class Maps extends AppCompatActivity { 
    MapFragment googleMap; 
    GoogleMap Map; 
    Intent locatorService = null; 
    Double lat = 0.0, lon = 0.0; 
    Typeface typeface; 
    int isAvailable = 777; 
    private LatLng location; 
    Boolean forEdit = false; 

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

     isAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
     typeface = Func.getTypeFace(this); 

     final Bundle bl = getIntent().getExtras(); 
     if (bl != null) { 
      forEdit = true; 
     } 

     if (isAvailable == 0) { 
      googleMap = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
      googleMap.getMapAsync(new OnMapReadyCallback() { 
       @Override 
       public void onMapReady(GoogleMap googleMap) { 
        Map = googleMap; 

        if (googleMap == null) { 
         Toast.makeText(getApplicationContext(), 
           "نقشه روی گوشی شما قابل نمایش نیست", Toast.LENGTH_SHORT) 
           .show(); 
        } 

       } 
      }); 
     } 
     mapBuilder(); 
    } 

    private void mapBuilder() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M 
       && checkSelfPermission(
       android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && checkSelfPermission(
       android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(Maps.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1); 
     } else { 
      doGPS(); 
     } 


    } 

    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        mapBuilder(); 
       } else { 
        MyToast.makeText(Maps.this, "دسترسی به جی پی اس غیرفعال است"); 
       } 
       return; 
      } 
     } 
    } 

    public boolean stopService() { 
     if (this.locatorService != null) { 
      this.locatorService = null; 
     } 
     return true; 
    } 

    public boolean startService() { 
     try { 
      FetchCordinates fetchCordinates = new FetchCordinates(); 
      fetchCordinates.execute(); 
      return true; 
     } catch (Exception error) { 
      return false; 
     } 
    } 

    public AlertDialog CreateAlert(String title, String message) { 
     AlertDialog alert = new AlertDialog.Builder(this).create(); 

     alert.setTitle(title); 

     alert.setMessage(message); 

     return alert; 

    } 

    public class FetchCordinates extends AsyncTask<String, Integer, String> { 
     AlertDialog.Builder a; 
     AlertDialog dialog; 

     public double lati = 0.0; 
     public double longi = 0.0; 

     public LocationManager mLocationManager; 
     public VeggsterLocationListener mVeggsterLocationListener; 

     @Override 
     protected void onPreExecute() { 
      mVeggsterLocationListener = new VeggsterLocationListener(); 
      mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

      mLocationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 0, 0, 
        mVeggsterLocationListener); 
     } 

     @Override 
     protected void onCancelled() { 
      System.out.println("Cancelled by user!"); 
      dialog.dismiss(); 
      mLocationManager.removeUpdates(mVeggsterLocationListener); 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      try { 
       if (dialog != null) 
        dialog.dismiss(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      lat = lati; 
      lon = longi; 

      location = new LatLng(lat, lon); 
      Map.addMarker(new MarkerOptions().position(location).title("مکان فعلی")); 
      CameraUpdate update = CameraUpdateFactory.newLatLng(location); 
      update = CameraUpdateFactory.newLatLngZoom(location, 15); //zooom 
      Map.animateCamera(update); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      // TODO Auto-generated method stub 

      while (this.lati == 0.0) { 

      } 
      return null; 
     } 

     public class VeggsterLocationListener implements LocationListener { 

      @Override 
      public void onLocationChanged(Location location) { 

       int lat = (int) location.getLatitude(); // * 1E6); 
       int log = (int) location.getLongitude(); // * 1E6); 
       int acc = (int) (location.getAccuracy()); 

       String info = location.getProvider(); 
       try { 

        // LocatorService.myLatitude=location.getLatitude(); 

        // LocatorService.myLongitude=location.getLongitude(); 

        lati = location.getLatitude(); 
        longi = location.getLongitude(); 

       } catch (Exception e) { 
        // progDailog.dismiss(); 
        // Toast.makeText(getApplicationContext(),"Unable to get Location" 
        // , Toast.LENGTH_LONG).show(); 
       } 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 
       Log.i("OnProviderDisabled", "OnProviderDisabled"); 
      } 

      @Override 
      public void onProviderEnabled(String provider) { 
       Log.i("onProviderEnabled", "onProviderEnabled"); 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, 
             Bundle extras) { 
       Log.i("onStatusChanged", "onStatusChanged"); 

      } 

     } 

    } 

    private void doGPS() { 
     LocationManager mlocManager = null; 
     LocationListener mlocListener; 
     mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     mlocListener = new MyLocationListener(); 
     mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
     if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && forEdit == false) { 
      startService(); 
     } else { 
      android.support.v7.app.AlertDialog.Builder a = new android.support.v7.app.AlertDialog.Builder(Maps.this); 
      a.setMessage(("جی پی اس خاموش است. آیا میخواهید روشن کنید؟")); 
      a.setPositiveButton(("بله"), new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
        LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); 
        boolean enabled = service 
          .isProviderEnabled(LocationManager.GPS_PROVIDER); 
        if (!enabled) { 
         Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         startActivity(intent); 
        } 
       } 
      }); 
      a.setNegativeButton(("خیر"), new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 

      android.support.v7.app.AlertDialog dialog = a.show(); 
      TextView messageText = (TextView) dialog.findViewById(android.R.id.message); 
      messageText.setGravity(Gravity.RIGHT); 
      messageText.setTypeface(typeface); 
     } 

    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     if (Map != null && isAvailable != 777) 
      mapBuilder(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     stopService(); 
    } 

} 

c'est la mise en page xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <fragment 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</FrameLayout> 

pourriez-vous me aider? quel est le problème avec mon code?

+0

quel périphérique ne fonctionne pas? api et google play versions de service. est également cette autorisation accordée READ_GSERVICES? – tan

Répondre

0

Vérifiez la réponse de isGooglePlayServicesAvailable, il y a une bonne chance d'obtenir "SERVICE_VERSION_UPDATE_REQUIRED". L'utilisateur doit mettre à jour Google Play Services dans ce cas.

Les services Google Play seront automatiquement mis à jour si d'autres applications Google telles que Google+, GoogleMaps, Google Duo, etc. sont mises à jour.

switch (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity())) { 
     case ConnectionResult.SUCCESS: 
      googleMap = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
      googleMap.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       map = googleMap; 
       } 
      }); 
      break; 
     case ConnectionResult.SERVICE_MISSING: 
      Toast.makeText(getActivity(), "Google Play Services Missing", Toast.LENGTH_SHORT).show(); 
      break; 
     case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED: 
      //The user has to update play services 
      Toast.makeText(getActivity(), "Update Google Play Services", Toast.LENGTH_SHORT).show(); 
      break; 
     default: 
      Toast.makeText(getActivity(), GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()), Toast.LENGTH_SHORT).show(); 
    }