20

Mam problem z wyborem miejsca Google w Androidzie Redmi Phones w wersji 5.1.1. Korzystam z następującego kodu do uruchamiania selektora miejsca Google.Wybieranie miejsca Google nie uruchamia się na telefonach z Androidem Mi

try { 
     PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); 
        startActivityForResult(builder.build(SelectLocationActivity.this), 1); 
    } catch (Exception e) { 
       e.printStackTrace(); 
       Toast.makeText(SelectLocationActivity.this,""+e.getMessage(),Toast.LENGTH_LONG).show(); 
    } 

Dodałem następujące uprawnienia i klucz API oraz wersję usługi Google Play.

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<application> 
<meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
     <meta-data 
      android:name="com.google.android.geo.API_KEY" 
      android:value="my-api-key" /> 
</application> 

Działa na każdym telefonie z wyjątkiem Androida Redmi Note2. Wszelkie sugestie będą mile widziane. Z góry dziękuję.

+0

Podaj wersję usług Google Play urządzenia. Czy został zgłoszony wyjątek? Czy usługi Google Play są obecne na urządzeniu? Sprawdź, czy usługi odtwarzania są dostępne, ponieważ ze względu na chińskie przepisy są one dostarczane bez Usług Play https://developers.google.com/android/reference/com/google/android/gms/common/GoogleApiAvailability#isGooglePlayServicesAvailable(android.content .Context) Musisz rozpocząć rozwiązywanie, jeśli usługi odtwarzania nie są obecne. –

+0

Jaki błąd otrzymujesz? – AndroidHacker

+1

Brak błędów. Po prostu aktywność rozpoczyna się i natychmiast się zamyka. Nie pojawiają się błędy w logcat logA @AndroidHacker – Kaushal28

Odpowiedz

-1

Począwszy od wersji Android 6.0 (poziom API 23) użytkownicy udzielają uprawnień aplikacjom, gdy aplikacja jest uruchomiona, a nie podczas instalacji aplikacji. Takie podejście usprawnia proces instalacji aplikacji, ponieważ użytkownik nie musi udzielać uprawnień podczas instalowania lub aktualizowania aplikacji. Daje także użytkownikowi większą kontrolę nad funkcjonalnością aplikacji; na przykład użytkownik może zdecydować o przyznaniu dostępu do kamery aparatem, ale nie do lokalizacji urządzenia. Użytkownik może odwołać uprawnienia w dowolnym momencie, przechodząc do ekranu Ustawienia aplikacji.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.myapp" > 
    ... 
    <uses-permission 

android: name = "android.permission.ACCESS_COARSE_LOCATION" /> android: name = "android.permission.ACCESS_FINE_LOCATION" />

android: name = "android.permission.ACCESS_COARSE_LOCATION"/> ...

Dodaj ten kod do swojej aktywności w onCreate

askForPermission(Manifest.permission.ACCESS_FINE_LOCATION,LOCATION); 

/// c Wszystko to metoda

private void askForPermission(String permission, Integer requestCode) { 
     if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { 

      // Should we show an explanation? 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) { 

       //This is called if user has denied the permission before 
       //In this case I am just asking the permission again 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode); 

      } else { 

       ActivityCompat.requestPermissions(MainActivity.this, new String[]{permission}, requestCode); 
      } 
     } else { 
      Toast.makeText(this, "" + permission + " is already granted.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
+0

Dodałem już ten kod w mojej aplikacji. FYI: Domyślna wersja Androida Red Mi note 3 to 5.1 Lollipop. A mój kod działa w wersji 6.0 lub nowszej doskonale w innych telefonach. Tak więc dla tego konkretnego telefonu nie są wymagane żadne uprawnienia uruchomieniowe. Proszę wykonać badania przed odpowiedzią na pytania :) – Kaushal28

1

Na podstawie pliku manifestu, wierzę, że dodałeś klucz wewnątrz manifest tagu i nie application. W oparciu o Androida docs, klucz należy dodać tak:

<application> 
... 
    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="YOUR_API_KEY"/> 
</application> 

Niestety, nie mogę przetestować go z urządzeniem pan wspomniał, ale pamiętam, że podobny problem z urządzeniem Samsung (kod działa na każde urządzenie, z wyjątkiem tego). Sprawdź ponownie logi, może jest wiadomość i przegapiłeś ją.

+0

Przede wszystkim masz rację co do kluczowania. Ale to pytanie nie jest zadawane przeze mnie, więc nie mogę edytować. Prawidłowo umieściłem mój klucz, tak jak wspomniałeś. Ale jeśli klucz został błędnie umieszczony, to nie powinien działać na żadnym urządzeniu. Ale działa to doskonale na wszystkich innych urządzeniach (testowałem także na emulatorze i działa). Na początku stawiam czoła temu samemu (klucz wprowadzony błędnie), kiedy zacząłem budować moją aplikację. W takim przypadku należy otworzyć akcję Picker wyboru, ale nie wyświetlać sugestii dotyczących lokalizacji ani sugestii automatycznych. BTW dziękuje za poświęcenie czasu :) – Kaushal28

+0

Upewnij się, że Twoje telefony Redmi mają zainstalowany GoogleServices. – ohdroid

+0

@ Hdroid, jak dokładnie to sprawdzić? – Kaushal28