Younix's Studio.

组件_BroadcastReceiver

字数统计: 435阅读时长: 2 min
2018/08/11 Share

动态注册

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver; // 内部类

onCreate {
intentFilter = new IntentFilter();
// 添加 Action
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

networkChangeReceiver = new NetworkChangeReceiver(); // 内部类实例
registerReceiver(networkChangeReceiver, intentFilter);
}

// 内部类
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

// 获得系统服务类
ConnectivityManager connectivityManager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

// 具体的使用场景
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}

}
}

@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
unregisterReceiver(networkChangeReceiver);
}
}

AndroidManifest.xml

添加权限

1
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

静态注册

应用场景

接受开机广播
右击 包名 -> New -> Other -> BroadcastReceiver
enabled = true 表示是否启用该 BoardcastReceiver
exported = ture 表示允许接受本程序以外的 Boardcast

BootCompleteReceiver.java

1
2
3
4
5
6
7
8
9
10
public class BootCompleteReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
// throw new UnsupportedOperationException("Not yet implemented");
Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show();
}
}

AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<application
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>

自定义标准广播

应用场景

点击 Mainactivity 的 Button ,发送广播
然后 App 接收到并弹出 Toast

Mainactivity.java

1
2
3
4
5
6
7
8
9
// Example 3 MY_BROADCAST
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.iyounix.android.a010broadcasts.MY_BROADCAST");
sendBroadcast(intent);
}
});

MyBroadcastReceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "received in Younix BoardcastReceiver",Toast.LENGTH_SHORT).show();
}

}

AndroidManifest.xml

1
2
3
4
5
6
7
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.iyounix.android.a010broadcasts.MY_BROADCAST"/>
</intent-filter>
</receiver>
CATALOG
  1. 1. 动态注册
    1. 1.1. MainActivity.java
    2. 1.2. AndroidManifest.xml
  2. 2. 静态注册
    1. 2.1. 应用场景
    2. 2.2. BootCompleteReceiver.java
    3. 2.3. AndroidManifest.xml
  3. 3. 自定义标准广播
    1. 3.1. 应用场景
    2. 3.2. Mainactivity.java
    3. 3.3. MyBroadcastReceiver.java
    4. 3.4. AndroidManifest.xml