0

プログラムでモバイル ネットワーク/データ ネットワークを有効にしたい。このために、以下のコードを使用していますが、機能していません。エラーはありませんでした。トーストがポップアップし、「モバイル ネットワークが有効になりました」と表示されますが、実際には有効になっていません。助けてください。

これが完全なコードです。

public class MainActivity extends Activity {
ConnectivityManager connectivity;
NetworkInfo wifiNetworkInfo, mobileNetworkInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    connectivity  = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    wifiNetworkInfo = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    mobileNetworkInfo = connectivity.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (wifiNetworkInfo.isConnected())
        Toast.makeText(this, "WiFi is connected", Toast.LENGTH_LONG).show();
    else
        Toast.makeText(this, "WiFi is not connected", Toast.LENGTH_LONG).show();
    if(mobileNetworkInfo.isConnected())
        Toast.makeText(this, "MObileNetwork is connected", Toast.LENGTH_LONG).show();
    else{
        boolean enabled = false;
        try {
            setMobileDataEnabled(getBaseContext(), enabled);
            Toast.makeText(this, "MObileNetwork has been Enabled", Toast.LENGTH_LONG).show();
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}}
private void setMobileDataEnabled(Context context, boolean enabled) throws Throwable {
       final ConnectivityManager conman = (ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE);
       final Class<?> conmanClass = Class.forName(conman.getClass().getName());
       final java.lang.reflect.Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
       iConnectivityManagerField.setAccessible(true);
       final Object iConnectivityManager = iConnectivityManagerField.get(conman);
       final Class<?> iConnectivityManagerClass =  Class.forName(iConnectivityManager.getClass().getName());
       final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
       setMobileDataEnabledMethod.setAccessible(true);
       setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
    }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

4

2 に答える 2

1

私は前回のプロジェクトでこの問題を抱えていましたが、最終的に使用する必要があったアプローチは、この問題を処理する Google の方法によれば、代わりにユーザーの前に [Setting] -> [Mobile Networks Activity] をポップアップ表示することでした。これは、要件の理由だけでなく、法的条件の問題でもあります。アプリが 3G データを消費して、ユーザーが知らないうちにお金を使ってしまうと、法的な問題が発生する可能性があるためです...

よろしく!

于 2013-07-23T20:56:12.173 に答える