2017-08-18 2 views
3

次のコードを使用して、Android MarshmallowでWi-Fiテザリングホットスポットを作成しようとしました。marshmallowやAndroid版のプログラムでモバイルホットスポットを有効にするにはどうすればよいですか?

public class WifiAccessManager { 

private static final String SSID = "mHotspot"; 
public static boolean setWifiApState(Context context, boolean enabled) { 
    //config = Preconditions.checkNotNull(config); 
    try { 
     WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     if (enabled) { 
      mWifiManager.setWifiEnabled(false); 
     } 
     WifiConfiguration conf = getWifiApConfiguration(); 
     mWifiManager.addNetwork(conf); 

     return (Boolean) mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class).invoke(mWifiManager, conf, enabled); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

public static WifiConfiguration getWifiApConfiguration() { 
    WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = SSID; 
    conf.allowedKeyManagement.set(Integer.parseInt("12345678")); 
    return conf; 
} 

}

そしてまた、私は私のマニフェストファイル

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

で無線LANにアクセスするためのすべての権限を与えている。しかし、それはマシュマロにし、バージョンの上に活性化していません。私はホットスポットを有効にしていますたびに私はこの問題を解決するために

08-18 13:56:32.304 27844-27844/com.example.deneebo.ffconnect W/System.err: java.lang.reflect.InvocationTargetException 
08-18 13:56:32.304 27844-27844/com.example.deneebo.ffconnect W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
08-18 13:56:32.304 27844-27844/com.example.deneebo.ffconnect W/System.err:  at com.example.deneebo.ffconnect.WifiAccessManager.setWifiApState(WifiAccessManager.java:28) 
08-18 13:56:32.304 27844-27844/com.example.deneebo.ffconnect W/System.err:  at com.example.deneebo.ffconnect.DeviceFoundActivity.onCreate(DeviceFoundActivity.java:72) 
08-18 13:56:32.304 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.Activity.performCreate(Activity.java:6689) 
08-18 13:56:32.304 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2709) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2825) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.ActivityThread.-wrap12(ActivityThread.java) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1557) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:110) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.os.Looper.loop(Looper.java:203) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6339) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err: Caused by: java.lang.SecurityException: com.example.deneebo.ffconnect was not granted this permission: android.permission.WRITE_SETTINGS. 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.os.Parcel.readException(Parcel.java:1684) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.os.Parcel.readException(Parcel.java:1637) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.net.wifi.IWifiManager$Stub$Proxy.setWifiApEnabled(IWifiManager.java:1888) 
08-18 13:56:32.305 27844-27844/com.example.deneebo.ffconnect W/System.err:  at android.net.wifi.WifiManager.setWifiApEnabled(WifiManager.java:1748) 
08-18 13:56:32.306 27844-27844/com.example.deneebo.ffconnect W/System.err: ... 15 more 

が親切に助けて、このエラーを得た

おかげ

答えて

1

最後に、私はGoogleの開発者向けウェブサイト

https://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS

から解決策を持って、私は次の権限を追加した編集されていますマニフェストファイル

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 

と私のコードに次の行

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

を追加し、私はホットスポットを有効にしようとしています今までにすると

0

問題、ログから、この次のとおりです。

Caused by: java.lang.SecurityException: com.example.deneebo.ffconnect was not granted this permission: android.permission.WRITE_SETTINGS 

アプリはandroid.permission.WRITE_SETTINGS許可を必要とし、マシュマロにこの権限は単にマニフェストにそれを宣言することによって付与することはできません。これは、セキュリティを強化するために行った変更です。

あなたのアプリに許可を明示的に使用させるようにユーザーに依頼する必要があります。詳細はthis answerです。


この回答はOPは彼のログを掲示した後

+0

Mr.lorenzo-sのあなたの助けのためにどうもありがとうございます、私はこのエラー れるjava.langを得ました。 reflect.InvocationTargetException –

+0

@karthikeyanravichandiranさらにその行を見て、「原因」の例外を検索します。関連するすべてのログ部分を元の質問に投稿する必要があります。 –

+0

@karthikeyanravichandiranあなたのログを見て、私の答えを更新しました。 –

関連する問題