Die vier Hauptkomponenten von Android - ein einfacher Fall von Broadcasting

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);

Guess you like

Origin blog.csdn.net/qq_41008818/article/details/129291689