7

私は、次のコードから無線LANテザリングを有効にしようとしたとき、それはjava.lang.reflect.Methodオブジェクトの例外のAndroid 6.0.1は、プログラム

にjava.lang.reflect.InvocationTargetExceptionをスローWiFiホットスポットを有効にすることができませんでしたandroid.permission.WRITE_SETTINGS

しかし、これはアンドロイド6.0でとバージョン以下の罰金に動作します:COMで.invoke(ネイティブメソッド).....

が....この権限を付与されていません。また、与えようとしましたandroid.permission.WRITE_SETTINGSあまりにも。

android 6.1のwifiAPにアクセスする際に制限はありますか?

私がホットスポットを有効にするために使用したコードサンプルを添付しました。

  WifiConfiguration netConfig = new WifiConfiguration(); 
      netConfig.SSID = ssId; 
      netConfig.preSharedKey = passkey; 
      netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
      netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 

      try { 
       boolean apstatus = (Boolean) method.invoke(wifiManager, netConfig, true); 

       for (Method isWifiApEnabledmethod : wmMethods) { 
        if (isWifiApEnabledmethod.getName().equals("isWifiApEnabled")) { 
         while (!(Boolean) isWifiApEnabledmethod.invoke(wifiManager)) {} 

         for (Method method1 : wmMethods) { 
          if (method1.getName().equals("getWifiApState")) { 
           int apstate; 
           apstate = (Integer) method1.invoke(wifiManager); 
           Log.i(TAG, "Apstate ::: " + apstate); 
          } 
         } 
        } 
       } 

       if (apstatus) { 
        Log.d(TAG, "Access Point created"); 
       } else { 
        Log.d(TAG, "Access Point creation failed"); 
       } 

      } catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } catch (InvocationTargetException e) { 
       e.printStackTrace(); 
      } 

答えて

2

これは、この問題を修正し、正しいway.Butではありません。

ターゲットsdkのバージョンを21に変更しました。その後、ホットスポットがAndroid 6.0.1でもプログラムで起動します。 Android 6以降のバージョンでこれを行う適切な方法があるはずだと考えてください。私は、実行時のアクセス権を要求するには、そのような種類のprocessessを実行する必要があると思う。 This talks about the android permission requesting in runtime

+0

を私は、ブルートゥーススキャンに似た何かをバックビットをターゲットSDKを設定する必要がありました、それは古い機能をエミュレートし、であなたを妨げていません物事を行う新しい方法。 – stu

2

Android Mはプログラムでホットスポットを作成することはできません。マシュマロユーザーは設定ページにアクセスして、自分でホットスポットを作成することができます。以下のコードは設定ページに行くのに役立ちます。

startActivity(
    new Intent(Settings.ACTION_SETTINGS)); 
+0

なぜあなたは "考える" ..これをサポートするものはありますか?私はMでホットスポットを有効にしようとしています。ホットスポットを作成しましたが、有効にできません。 softap startで例外が発生するjava.lang.IllegalStateException:command '2707 softap set wlan0 ' –

2

設定された目標SDKバージョン21とあなたの活動のwrite_settings許可を求めます。また、マニフェストにandroid.permission.WRITE_SETTINGS権限を追加してください。詳細については

if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.WRITE_SETTINGS)){ 

}else { 
    ActivityCompat.requestPermissions(this, 
      new String[]{Manifest.permission.WRITE_SETTINGS}, 
      121); 
} 

私はすべてを試してみましたが、私は、Android 6.0でホットスポットを開始することができませんでしたhttp://developer.android.com/training/permissions/requesting.html

0

ガイズをご覧ください。 Apiが23以上であるかどうかを確認することができます。そうであれば、ユーザーを設定ページに移動して、単独でホットスポットを作成してください。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    final Intent intent = new Intent(Intent.ACTION_MAIN, null); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 
    final ComponentName cn = new ComponentName(
        "com.android.settings", 
        "com.android.settings.TetherSettings"); 
    intent.setComponent(cn); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
}else{ 
    createhotSpot(); 
} 
+0

私は、ロケーションサービスに基づいて無線LANホットスポットをオンにするアプリケーションを作成しました。プログラミングの全ポイントは、ユーザーが何もする必要がないように物事を自動化することです。どのような変更のGoogleは、機能の廃止されましたか? – stu

+1

@stu私はそのアプリケーションを配備しましたが、ユーザーの介入なしにWi-Fiを起動する方法を見つけることができませんでした。結局のところプログラミングは、ユーザーとのやりとりなしで自動化するためのものですが、Googleはここでゲームを指示しています;) – Alexander

0

許可はあなたの問題ではありません。あなたはこのようなコードが必要です。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
if (!Settings.System.canWrite(getApplicationContext())) { 
    Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName())); 
    startActivityForResult(intent, 200); //You need a callback for activity result so that check if user enabled this feature, go for starting hotspot (google for it) 
} else { 
    // Do your stuff about starting hotspot (in network thread) 
} 

}

関連する問題