2017-08-08 29 views
1

我需要在cn1中寫入原生android代碼的權限。但是下面的代碼並不要求權限,但給出了空白屏幕。在調試時,下面提到的調試的第二部分會無限重複。原生界面(android)問題的權限

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; 
} 

調試

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 

儘管調試,以下行重複無限

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: [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

公共類FusedLocationImpl實現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; 
} 

回答

0

開始都會發生應用程序啓動時。您正在請求獲得允許打開本機對話框的權限。應用程序被暫停。應用程序得到恢復,你再次要求許可...

通常這個代碼不會被達成,因爲你會暫停當前形式,但你甚至沒有足夠的時間發生。

在這個階段詢問權限是不好的,在本機和Codename One應用程序中。

沒有UI顯示,如果用戶說不,你卡住了。你需要一個上下文來顯示,然後詢問用戶的許可。

+0

其實權限是在一個btn動作偵聽器中。我要求ACCESS_FINE_LOCATION使用融合地點。以上只是一個例子。請看看上面的update1。 Thankyou – beck

+1

您是否也向android.xpermissions構建提示添加了權限?如果被用戶拒絕,你爲什麼又要提示許可?我們已經這麼做了,如果你也這樣做了,它也不會很好看。 –

+0

ohhh thankyou ...我忘了添加android.xpermissions提示。如果權限被用戶拒絕,我不知道該返回什麼,所以再次詢問。 – beck