先看下主页面代码
mainactivity.java
package cn.xiayiye.networkchange;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Method;
public class MainActivity extends Activity implements View.OnClickListener {
private NetworkChange networkChange;
private TextView change;
private Button set_network;
private EditText message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
change = (TextView) findViewById(R.id.change);
Button send_broadcast = (Button) findViewById(R.id.send_broadcast);
set_network = (Button) findViewById(R.id.set_network);
message = (EditText) findViewById(R.id.message);
change.setFocusable(true);
change.setClickable(true);
listenerNetWorkChange();
send_broadcast.setOnClickListener(this);
change.setOnClickListener(this);
set_network.setOnClickListener(MainActivity.this);
}
private void listenerNetWorkChange() {
/* IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//一样的效果
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);//一样的效果和下面*/
IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");//网络状态改变的广播
networkChange = new NetworkChange();
registerReceiver(networkChange, intentFilter);
}
class NetworkChange extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();//获取网络状态
if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()) {
Toast.makeText(MainActivity.this, "已连网!", Toast.LENGTH_LONG).show();
change.setText("网络已连接!");
set_network.setVisibility(View.GONE);
} else {
Toast.makeText(MainActivity.this, "已断网!", Toast.LENGTH_LONG).show();
set_network.setVisibility(View.VISIBLE);
change.setText("网络已断开!");
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.change:
setMobileDataEnabled(true);
Toast.makeText(MainActivity.this, "点击了!", Toast.LENGTH_LONG).show();
break;
case R.id.send_broadcast:
String trim = message.getText().toString().trim();
if (TextUtils.isEmpty(trim)) {
Toast.makeText(MainActivity.this, "请输入内容,在发送广播!", Toast.LENGTH_LONG).show();
} else {
//发送自定义广播
// Intent intent = new Intent();
Intent intent = new Intent("com.yhsh.xiayiye");
// intent.setAction("com.yhsh.xiayiye");//一样的效果,这里是setAction,在intentFilter里面是addAction
intent.putExtra("send", "扬宏豕慧接收到的广播:" + trim);
sendBroadcast(intent);
sendOrderedBroadcast(intent, null);
}
break;
case R.id.set_network:
//跳转到网络设置页面
Intent intent_net = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);
startActivity(intent_net);
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChange);
}
public boolean setMobileDataEnabled(boolean enabled) {
final TelephonyManager mTelManager;
mTelManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
try {
Method m = mTelManager.getClass().getDeclaredMethod("getITelephony");
m.setAccessible(true);
Object telephony = m.invoke(mTelManager);
m = telephony.getClass().getMethod((enabled ? "enable" : "disable") + "DataConnectivity");
m.invoke(telephony);
return true;
} catch (Exception e) {
return false;
}
}
}
再看下我们定义的开机自启广播
bootCompleteReceiver.java
package cn.xiayiye.networkchange;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class bootCompleteReceiver extends BroadcastReceiver {
static final String ACTION = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "开机了!", Toast.LENGTH_LONG).show();
// throw new UnsupportedOperationException("Not yet implemented");
if (intent.getAction().equals(ACTION)) {
//APP的开机自启实现方法
Intent mainActivityIntent = new Intent(context, MainActivity.class); // 要启动的Activity
mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainActivityIntent);
}
}
}
再看下自定义的广播文件
CustomerReceiver.java
package cn.xiayiye.networkchange;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class CustomerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String send = intent.getStringExtra("send");//拿到发送广播发过来的数据
Toast.makeText(context, "发送了自定义广播,内容为:\n" + send, Toast.LENGTH_LONG).show();
// abortBroadcast();//从此处阻断广播
}
}
再看下相应的清单配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.xiayiye.networkchange">
//查看网络状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
//更改网络状态
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
//开机自启动权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".bootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
//以下为开机自启动广播,添加后可检测到系统开机
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=".CustomerReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.yhsh.xiayiye" />
</intent-filter>
</receiver>
</application>
</manifest>
好了,想要源码的可以下载:点击下载源码