Google на выбор не запускается на телефонах Android Mi
У меня возникла проблема с Google Place Picker в Android Redmi Phones версии 5.1.1. Я использую следующий код для запуска Google Place Picker.
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();
}
Я добавил следующие разрешения и ключ api и версию сервиса 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>
Он работает на каждом телефоне, кроме Android Redmi Note2. Любое предложение будет оценено по достоинству. Спасибо заранее.
Ответы
Ответ 1
На основе вашего файла манифеста я считаю, что вы добавили ключ внутри тега manifest
, а не application
. На основе Android-документов ключ должен быть добавлен следующим образом:
<application>
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY"/>
</application>
К сожалению, я не могу проверить его с помощью устройства, о котором вы упомянули, но я помню, что у меня аналогичная проблема с устройством Samsung
(код работал на каждом устройстве, кроме этого). Кроме того, проверьте журналы снова, возможно, есть сообщение, и вы его пропустили.
Ответ 2
Начиная с Android 6.0 (уровень API 23), пользователи предоставляют разрешения для приложений во время работы приложения, а не при установке приложения. Этот подход упрощает процесс установки приложения, поскольку пользователю не нужно предоставлять разрешения при установке или обновлении приложения. Это также дает пользователю больше контроля над функциональностью приложения; например, пользователь может выбрать доступ к камере для камеры, но не к местоположению устройства. Пользователь может отменить разрешения в любое время, перейдя на экран настроек приложения.
<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" /" > ...
Добавьте этот код в свою деятельность в OnCreate
askForPermission(Manifest.permission.ACCESS_FINE_LOCATION,LOCATION);
///вызов этого метода
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();
}
}