2017-07-11 34 views
1

我的應用程序想要在啓動時請求Wifi權限。到目前爲止,我已設法通過設置權限設置。但我不想做到這一點。到目前爲止,我已經看到了這個前Question。我可以理解一點,但它不夠。我創建了一個。類,它可以像打開/關閉,檢查wifi狀態一樣管理Wifi活動。如果Wifi許可是授予,但它工作得很好,但如果不行,它不起作用。
這是我創建的WifiController.class
在運行時運行膠合移動應用程序時請求獲得Wifi許可

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

} 

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

回答

2

你必須要求在運行時的權限:

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

+0

我會TR你看,@ AKASHDEEP KATIYAR –

+0

好的。接受答案,如果它出來 –

1

很大程度上基於這個answer,我創建了以下類來請求應用程序啓動時的權限,當android版本在> =棉花糖:

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的支持庫添加到您的build.gradle:

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

更多信息有關wifiManager /權限看到link

+0

\ AndroidPlatform.java:60:錯誤:找不到符號 FXActivity.getInstance()。onRequestPermissionsResult(requestCode,permissions,grantResults);^ 符號:方法onRequestPermissionsResult(int,String [],int []) 位置:變量行爲的類型FXActivity –

+0

我得到這個上面的錯誤@jns,我已經包括所有需要的庫和我的IDE顯示它的錯誤釋放但在啓動任務** android安裝**正在獲取上述錯誤。 –

+0

該API需要Android SDK 23+。您需要相應地設置'compileSdkVersion'參數。 –

相關問題