Android 4.4(KK)中利用APP打开关闭数据流量
2014-12-19 14:14
417 查看
在Android 4.4中,在app中打开或关闭数据流量
如果有这方面需求可以参考。思路
利用JAVA的反射机制(Reflection),来调用CONNECTIVITY_SERVICE完成相关操作。关于JAVA的反射机制,可以参考百度百科或者以下文章:
JAVA反射机制 :http://blog.csdn.net/justinavril/article/details/2873664
java反射详解 :http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
代码
首先要添加权限改变状态要添加 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 访问数据要添加 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在视图中只需要添加一个按钮充当开关:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="144dp" android:text="打开/关闭 GPRS" /> </RelativeLayout>
在JAVA文件中利用反射机制打开或者关闭数据流量:
package com.example.opengprs; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button OnOff = (Button) findViewById(R.id.button1); OnOff.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Method dataConnSwitchmethod; Class connManagerClass; Object IConnStub; Class IConnClass; boolean isEnable; NetworkInfo mNetworkInfo; ConnectivityManager ConnManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); mNetworkInfo=ConnManager.getActiveNetworkInfo(); if(mNetworkInfo != null){ if(mNetworkInfo.isAvailable()==true) isEnable = true; else isEnable = false; }else{ isEnable = false; } try { connManagerClass = Class.forName(ConnManager.getClass().getName()); Method m[]=connManagerClass.getDeclaredMethods(); for(int i=0;i<m.length;i++) Log.d("OnOff", m[i].toString()); Field getITelephonyMethod = connManagerClass.getDeclaredField("mService"); getITelephonyMethod.setAccessible(true); IConnStub = getITelephonyMethod.get(ConnManager); IConnClass = Class.forName(IConnStub.getClass().getName()); dataConnSwitchmethod=IConnClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); dataConnSwitchmethod.setAccessible(true); dataConnSwitchmethod.invoke(IConnStub,!isEnable); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } }
这样就可以在APP里打开或关闭数据流量了。
相关文章推荐
- Android打开/关闭数据流量
- Android 打开关闭GPRS数据流量
- 9.1、Android中得到新打开Activity 关闭后返回的数据
- Android(Java):得到新打开Activity 关闭后返回的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android 利用程序实现GPS的打开或关闭
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据(转)
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android中用对话框打开wifi和数据流量。
- Android 利用jsoup 抓取腾讯应用市场的软件APP,作为我们自己应用的数据
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android利用代码清除App的数据和重启设备
- android 之得到新打开Activity 关闭后返回的数据
- Android开发之得到新打开Activity关闭后返回的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- android开发之使用startActivityForResut获得打开的新窗体关闭后返回的数据
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据