J'ai besoin d'une autorisation lors de l'écriture du code android natif dans cn1. Mais le code suivant ne demande pas la permission mais donne un écran vide. Lors du débogage, la 2ème partie du débogage mentionnée ci-dessous se répète à l'infini.Autorisation dans l'interface native (android) issue
import android.Manifest;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import com.codename1.impl.android.AndroidNativeUtil;
public class FusedLocationImpl implements ConnectionCallbacks,
OnConnectionFailedListener{
public boolean isSupported() {
return true;
}
public void getFusedLocationPermission() {
if (!com.codename1.impl.android.AndroidNativeUtil.checkForPermission(Manifest.permission.CAMERA, "Please allow camera permission")) {
ActivityCompat.requestPermissions((android.app.Activity) MyApplication.getContext(), new String[]{Manifest.permission.CAMERA}, 0);
//commenting this line does nothing
}
}
}
FusedLocation.java
public interface FusedLocation extends NativeInterface{
public void getFusedLocationPermission();
}
MyApplication.java
public void start() {
if (current != null) {
current.show();
return;
}
FusedLocation my = (FusedLocation) NativeLookup.create(FusedLocation.class);
if(my != null && my.isSupported()){
my.getFusedLocationPermission();
System.out.println("bbeck");
}
Form hi = new Form("Hi World", BoxLayout.y());
hi.add(new Label("Hi World"));
hi.show();
}
public static Object getContext() {
return context;
}
Debugging
08-08 14:56:49.161: W/ResourcesManager(4437): Resource getTopLevelResources for package com.fusedLocation.myappoverlayDirs =Null
08-08 14:56:49.171: W/System(4437): ClassLoader referenced unknown path: /data/app/com.fusedLocation.myapp-1/lib/arm
08-08 14:56:49.181: D/ContextRelationManager(4437): ContextRelationManager() : FEATURE_ENABLED=true
08-08 14:56:49.231: I/GMPM(4437): App measurement is starting up
08-08 14:56:49.241: E/GMPM(4437): getGoogleAppId failed with status: 10
08-08 14:56:49.241: E/GMPM(4437): Uploading is not possible. App measurement disabled
08-08 14:56:49.261: E/Qmage(4437): isQIO : stream is not a QIO file
08-08 14:56:49.261: E/Qmage(4437): isQIO : stream is not a QIO file
08-08 14:56:49.261: E/Qmage(4437): isQIO : stream is not a QIO file
08-08 14:56:49.311: D/SecWifiDisplayUtil(4437): Metadata value : SecSettings2
08-08 14:56:49.311: D/ViewRootImpl(4437): #1 mView = com.android.internal.policy.PhoneWindow$DecorView{a207dc I.ED..... R.....ID 0,0-0,0}
08-08 14:56:49.311: D/OpenGLRenderer(4437): Use EGL_SWAP_BEHAVIOR_PRESERVED: true
08-08 14:56:49.331: W/ActivityThread(4437): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:56:49.361: I/Codename One(4437): Resource not found: theme_phone.ovr
08-08 14:56:49.361: I/Codename One(4437): Resource not found: theme_android.ovr
08-08 14:56:49.361: I/Codename One(4437): Resource not found: theme_android-phone.ovr
08-08 14:56:49.361: D/libEGL(4437): eglInitialize EGLDisplay = 0xddf077c4
Bien que le débogage, les lignes suivantes répéter à l'infini
08-08 14:17:26.871: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:26.871: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41788755
08-08 14:17:26.991: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:26.991: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41788872
08-08 14:17:27.071: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.071: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41788957
08-08 14:17:27.171: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789058
08-08 14:17:27.171: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.371: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.371: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789256
08-08 14:17:27.491: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.491: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789373
08-08 14:17:27.591: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.591: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789475
08-08 14:17:27.761: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.761: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789640
08-08 14:17:27.871: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.871: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789757
08-08 14:17:27.971: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:27.971: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789857
08-08 14:17:28.071: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.071: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41789958
08-08 14:17:28.141: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.141: I/Timeline(29413): Timeline: Activity_idle id: android.os.Bin[email protected] time:41790025
08-08 14:17:28.241: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.241: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41790125
08-08 14:17:28.341: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.341: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41790227
08-08 14:17:28.441: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.441: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41790325
08-08 14:17:28.541: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.541: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41790426
08-08 14:17:28.641: W/ActivityThread(29413): AppLock checkAppLockState isAppLocked = false pkgName = com.fusedLocation.myapp showWhenLocked = false
08-08 14:17:28.641: I/Timeline(29413): Timeline: Activity_idle id: [email protected] time:41790526
Updated1
public class FusedLocationImpl implémente ConnectionCallbacks, OnConnectionFailedListener {
public boolean isSupported() {
return true;
}
public void getFusedLocationPermission() {
if (!com.codename1.impl.android.AndroidNativeUtil.checkForPermission(Manifest.permission.ACCESS_FINE_LOCATION, "Please allow location permission")) {
// you didn't get the permission, you might want to return here
ActivityCompat.requestPermissions((android.app.Activity) MyApplication.getContext(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
}
}
}
FusedLocation.java
public interface FusedLocation extends NativeInterface{
public void getFusedLocationPermission();
public void fusedLocation();
}
MyApplication.java
public void start() {
if (current != null) {
current.show();
return;
}
Form hi = new Form("Hi World", BoxLayout.y());
hi.show();
Button btn = new Button("ask for permission");
btn.addActionListener(e -> {
FusedLocation my = (FusedLocation) NativeLookup.create(FusedLocation.class);
if (my != null && my.isSupported()) {
my.getFusedLocationPermission();
my.fusedLocation();
}
});
hi.add(btn);
}
public static Object getContext() {
return context;
}
En fait, l'autorisation est à l'intérieur d'un programme d'écoute d'action btn. Je demande à ACCESS_FINE_LOCATION d'utiliser l'emplacement fusionné. Ci-dessus était juste un exemple. S'il vous plaît jeter un oeil à update1 ci-dessus. Thankyou – beck
Avez-vous ajouté l'autorisation à l'indice de construction android.xpermissions aussi? Pourquoi demandez-vous à nouveau l'autorisation si l'utilisateur le refuse? Nous faisons déjà cela et ça ne sera pas bien si vous le faites aussi. –
ohhh merci ... j'ai oublié d'ajouter l'indice android.xpermissions. Je ne sais pas quoi retourner si l'autorisation est refusée par l'utilisateur, donc à nouveau demandé. – beck