Flutter 授予权限
Flutter grant permission
我很难在 运行 Android 6.0.
的 XIAOMI REDMI NOTE 4 上询问 ACCESS_FINE_LOCATION
我尝试使用地理编码器和位置。它适用于 iphone 和三星 Android 8(不知道名字)。
TL;DR : 权限从不询问,在应用设置和小米中不可见。
这是我的代码:
Android
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import java.util.Arrays;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL_GPS = "runtimepermission/access_fine_location";
private PermissionCallback getAccessFineLocationPermissionCallback;
private boolean rationaleJustShown = false;
private static final int GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID = 1234;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new MethodChannel(getFlutterView(), CHANNEL_GPS).setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, final MethodChannel.Result result) {
getAccessFineLocationPermissionCallback = new PermissionCallback() {
@Override
public void granted() {
rationaleJustShown = false;
result.success(0);
}
@Override
public void denied() {
rationaleJustShown = false;
result.success(1);
}
};
if (call.method.equals("hasPermission")) {
askPermission();
}
}
});
}
private void askPermission() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID);
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
System.out.println("requestCode:" + requestCode);
for (int grantResult : grantResults) {
System.out.println("grandResult[i]:" + grantResult);
}
switch (requestCode) {
case GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getAccessFineLocationPermissionCallback.granted();
} else {
getAccessFineLocationPermissionCallback.denied();
}
return;
}
}
public interface PermissionCallback {
void granted();
void denied();
}
颤振:
static const _methodChannel = const MethodChannel('runtimepermission/access_fine_location');
Future<PermissionState> canGetLocation() async {
try {
final int result = await _methodChannel.invokeMethod('hasPermission');
return new Future.value(PermissionState.values.elementAt(result));
} on PlatformException catch (e) {
print('Exception ' + e.toString());
}
return new Future.value(PermissionState.DENIED);
}
它抛出带有错误消息的 PlatformException:用户明确拒绝为此应用使用位置服务,或者位置服务当前在“设置”中被禁用。
在phone上,弹出窗口永远不会出现,权限也不会显示在设置>已安装的应用程序>我的应用程序>权限
你能帮帮我吗?
谢谢
有同样的问题。我能够通过使应用程序自动初始化并且不优化电池来解决我的问题。到目前为止,这似乎是小米唯一的问题,没有插件或 flutter dev 解决方案。我的建议是制作一个屏幕,教用户做什么并重定向他们
缓存问题。
如果您遇到像我一样的奇怪问题,请清理缓存 :)
我很难在 运行 Android 6.0.
的 XIAOMI REDMI NOTE 4 上询问 ACCESS_FINE_LOCATION我尝试使用地理编码器和位置。它适用于 iphone 和三星 Android 8(不知道名字)。
TL;DR : 权限从不询问,在应用设置和小米中不可见。
这是我的代码:
Android
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import java.util.Arrays;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL_GPS = "runtimepermission/access_fine_location";
private PermissionCallback getAccessFineLocationPermissionCallback;
private boolean rationaleJustShown = false;
private static final int GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID = 1234;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new MethodChannel(getFlutterView(), CHANNEL_GPS).setMethodCallHandler(
new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, final MethodChannel.Result result) {
getAccessFineLocationPermissionCallback = new PermissionCallback() {
@Override
public void granted() {
rationaleJustShown = false;
result.success(0);
}
@Override
public void denied() {
rationaleJustShown = false;
result.success(1);
}
};
if (call.method.equals("hasPermission")) {
askPermission();
}
}
});
}
private void askPermission() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID);
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
System.out.println("requestCode:" + requestCode);
for (int grantResult : grantResults) {
System.out.println("grandResult[i]:" + grantResult);
}
switch (requestCode) {
case GET_ACCESS_FINE_LOCATION_PERMISSION_REQUEST_ID:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getAccessFineLocationPermissionCallback.granted();
} else {
getAccessFineLocationPermissionCallback.denied();
}
return;
}
}
public interface PermissionCallback {
void granted();
void denied();
}
颤振:
static const _methodChannel = const MethodChannel('runtimepermission/access_fine_location');
Future<PermissionState> canGetLocation() async {
try {
final int result = await _methodChannel.invokeMethod('hasPermission');
return new Future.value(PermissionState.values.elementAt(result));
} on PlatformException catch (e) {
print('Exception ' + e.toString());
}
return new Future.value(PermissionState.DENIED);
}
它抛出带有错误消息的 PlatformException:用户明确拒绝为此应用使用位置服务,或者位置服务当前在“设置”中被禁用。
在phone上,弹出窗口永远不会出现,权限也不会显示在设置>已安装的应用程序>我的应用程序>权限
你能帮帮我吗? 谢谢
有同样的问题。我能够通过使应用程序自动初始化并且不优化电池来解决我的问题。到目前为止,这似乎是小米唯一的问题,没有插件或 flutter dev 解决方案。我的建议是制作一个屏幕,教用户做什么并重定向他们
缓存问题。 如果您遇到像我一样的奇怪问题,请清理缓存 :)