簡體   English   中英

在運行時運行Gluon移動應用程序時請求Wifi許可

[英]Request for Wifi Permission when running a Gluon-Mobile Application in Run-time

我的應用程序想一開始就請求Wifi許可。到目前為止,我已經設法通過Setting來授予許可。但是我不想再這樣做了。到目前為止,我已經看到了前面的問題 。我可以理解一點。但是這不夠。 我創建了一個.class來管理Wifi活動,例如打開/關閉,檢查wifi狀態。如果授予了 Wifi權限,它可以很好地工作。
這是我創建的WifiController.class

import android.content.Context;
import android.net.wifi.WifiManager;
import javafxports.android.FXActivity;


public class WifiController implements WifiInterface
{

WifiManager wifiManager=null;

WifiController()
{
    wifiManager = (WifiManager)FXActivity.getInstance().getSystemService(Context.WIFI_SERVICE);
}

WifiManager getWifimanager()
{
    return wifiManager;
}

public boolean isTurnedOn()
{
    return wifiManager.isWifiEnabled();
}

public boolean turnOn()
{
    wifiManager.setWifiEnabled(true);
    return true;
}

public boolean turnOff()
{
    wifiManager.setWifiEnabled(false);
    return true;
}

}

所以,請賜教。 提前致謝。

Android開發者網站上有一個很好的演練示例,介紹了運行時權限的工作原理:

https://developer.android.com/training/permissions/requesting.html

另外,不要忘記將權限也添加到清單中。

您已在運行時請求許可:

if (ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {


if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
        Manifest.permission.READ_EXTERNAL_STORAGE)) {

    // Show an explanation to the user *asynchronously* -- don't block
    // this thread waiting for the user's response! After the user
    // sees the explanation, try again to request the permission.

} else {

    // No explanation needed, we can request the permission.

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
            REQUEST_PERMISSION);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant. The callback method gets the
    // result of the request.
}
}

然后執行您想要的操作(如果用戶獲得許可):

@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION) {
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        // Permission granted.
    } else {
        // User refused to grant permission.
    }
}
}

您可以在此處閱讀更多信息: https : //developer.android.com/training/permissions/requesting.html

基於此答案 ,我創建了以下類來在Android版本> = Marshmallow時請求啟動應用程序的權限:

public class AndroidPlatform {

    private static final String KEY_PERMISSIONS              = "permissions";
    private static final String KEY_REQUEST_CODE             = "requestCode";
    private static final int    REQUEST_CODE_ASK_PERMISSIONS = 246;
    private static final int    REQUEST_CODE                 = 123;

    private final FXActivity    activity;

    public AndroidPlatform() {
        activity = FXActivity.getInstance();
    }

    public void checkPermissions() {
        if (Build.VERSION.SDK_INT >= MARSHMALLOW) {

            List<String> requiredPermissions = new ArrayList<>();
            addPermission(activity, requiredPermissions , Manifest.permission.ACCESS_COARSE_LOCATION);
            // additional required permissions

            if (!requiredPermissions.isEmpty()) {
                Intent permIntent = new Intent(activity, PermissionRequestActivity.class);
                permIntent.putExtra(KEY_PERMISSIONS, requiredPermissions.toArray(new String[requiredPermissions .size()]));
                permIntent.putExtra(KEY_REQUEST_CODE, REQUEST_CODE);
                activity.startActivityForResult(permIntent, REQUEST_CODE_ASK_PERMISSIONS);
            }
        }
    }

    private void addPermission(Activity activity, List<String> permissionsList, String permission) {
        if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
        }
    }

    public static class PermissionRequestActivity extends Activity {

        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            FXActivity.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
            finish();
        }

        @Override
        protected void onStart() {
            super.onStart();
            String[] permissions = this.getIntent().getStringArrayExtra(KEY_PERMISSIONS);
            int requestCode = this.getIntent().getIntExtra(KEY_REQUEST_CODE, 0);

            ActivityCompat.requestPermissions(this, permissions, requestCode);
        }
    }

}

在您的AndroidManifest.xml中,您必須添加相應的活動:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<activity android:name="yourpackage.AndroidPlatform$PermissionRequestActivity" />

另外,您還必須將android-support-library添加到build.gradle中:

dependencies {
    androidCompile files('libs/android-support-v4.jar')
    compileNoRetrolambda files('libs/android-support-v4.jar')
}

有關wifiManager /權限的更多信息,請參見鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM