[英]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.