1. Grundlegende Verwendung des Standardrundfunks
1. Tags definieren
public static final String TAG="com.test.broadcast";
2. senden
//发送标准广播
Intent intent = new Intent(TAG);
intent.putExtra("DATA1","AAAAAA");
intent.putExtra("DATA2","BBBBBB");
sendBroadcast(intent);
3. Anmeldung (Empfang)
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));
Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));
}
}
IntentFilter filter = new IntentFilter();
filter.addAction(TAG);
BroadcastReceiver br = new MyBroadcastReceiver();
registerReceiver(br, filter);
4. Abmeldung (muss eine Abmeldung haben, sonst kann es zu Speicherlecks kommen)
unregisterReceiver(br);
2. Grundlegende Nutzung des geordneten Rundfunks
1. Tags definieren
public static final String TAG="com.test.broadcast";
2. senden
//发送有序广播
Intent intent = new Intent(TAG);
intent.putExtra("DATA1","AAAAAA");
intent.putExtra("DATA2","BBBBBB");
sendOrderedBroadcast(intent,null);
3. Anmeldung (Empfang)
(1) Hochwertiger Empfänger
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));
Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));
}
}
IntentFilter filter = new IntentFilter();
filter.setPriority(100);//设置优先级(广播根据这个优先级,判断先通知谁,数字越大,优先级越高)
filter.addAction(TAG);
MyBroadcastReceiver br = new MyBroadcastReceiver();
registerReceiver(br, filter);
(2) Low-Level-Empfänger
public class MyBroadcastReceiverLow extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("fxHou","收到广播Low Data1="+intent.getStringExtra("DATA1"));
Log.d("fxHou","收到广播Low Data2="+intent.getStringExtra("DATA2"));
}
}
IntentFilter filter2 = new IntentFilter();
filter2.setPriority(90);//设置优先级(广播根据这个优先级,判断先通知谁,数字越大,优先级越高)
filter2.addAction(TAG);
br2 = new MyBroadcastReceiverLow();
registerReceiver(br2, filter2);
(3) Ergebnis drucken
2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data1=AAAAAA
2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data2=BBBBBB
2023-02-28 17:05:13.807 28917-28917 fxHou 收到广播Low Data1=AAAAAA
2023-02-28 17:05:13.808 28917-28917 fxHou 收到广播Low Data2=BBBBBB
4. Broadcast abfangen (Abfangen mit hoher Priorität, nicht an niedrige Priorität weitergegeben)
(1) Aufruf von abortBroadcast() im Empfänger mit hoher Priorität;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));
Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));
//中止广播(拦截有序广播不往下一个接收器传递)
abortBroadcast();
}
}
(2) Drucken Sie das Ergebnis (der Zuhörer mit niedriger Priorität kann die Sendung nicht hören)
2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data1=AAAAAA
2023-02-28 17:05:13.799 28917-28917 fxHou 收到广播 Data2=BBBBBB
5. Abmelden
unregisterReceiver(br);
unregisterReceiver(br2);
3. Benutzerdefinierte Berechtigungsübertragung
Manchmal möchten wir eine Systemübertragung an eine andere APP senden, aber wir möchten nicht, dass alle APPs von Drittanbietern diese Übertragung abhören können, sodass wir die Isolierung durch Berechtigungsverwaltung implementieren können.
1. Definieren Sie den Berechtigungsnamen
public static final String MY_PERMISSION_NAME="com.my.permission.name";
2. Bringen Sie beim Senden einer Sendung Berechtigungen mit
sendBroadcast(intent,MY_PERMISSION_NAME); //标准广播,带权限
sendOrderedBroadcast(intent,MY_PERMISSION_NAME);//有序广播,带权限
3. Wenn die Drittanbieter-APP diese Sendung hören möchte, muss sie eine Genehmigung beantragen
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.soface.broadcastdemo">
<!--申请广播权限-->
<uses-permission android:name="com.my.permission.name"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BroadcastDemo"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
4. Lokaler Rundfunk
1. Senden Sie an den angegebenen Empfänger
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.youyu4", "com.example.youyu4.MyBroadcastReceiver"));//参数为包名和类名,注意类名中要包括包名
sendBroadcast(intent);
2. Anwendungsübertragung
(1) Schreiben Sie einen Zuhörer
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("fxHou","收到广播 Data1="+intent.getStringExtra("DATA1"));
Log.d("fxHou","收到广播 Data2="+intent.getStringExtra("DATA2"));
}
}
(2) Registrierung
IntentFilter filter = new IntentFilter();
filter.addAction("TAG");
BroadcastReceiver br = new MyBroadcastReceiver();
//本地广播管理器获取实例
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
//本地广播注册方式略有不同
localBroadcastManager.registerReceiver(br,filter);
(3) Stornierung
ocalBroadcastManager.unregisterReceiver(br);
(4) Rundsendung senden
Intent intent = new Intent("com.example.viewmodeltest.LOCALBROADCAST_TEST");
localBroadcastManager.sendBroadcast(intent);