Android Framwork基础之广播Broadcast/Recevier

广播

网上教程很多,不是负责framework开发的,但平时也会接触到,所以自己实现一遍

动态广播、

动态注册的广播受Activity声明周期的影响,Activity消亡,则无法接受到广播

public class MainActivity extends AppCompatActivity {
    
    
    private IntentFilter intentFilter;//过滤器
    private ClickReceiver clickReceiver;
    private Button button1;
    private Button button2;
    public static String action1 = "android.button.click1";
    public static String action2 = "android.button.click2";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intentFilter = new IntentFilter();
        intentFilter.addAction(action1);
        intentFilter.addAction(action2);
        clickReceiver = new ClickReceiver();
        registerReceiver(clickReceiver, intentFilter);

        button1 = findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View view) {
    
    
                Intent intent = new Intent(action1);
                sendBroadcast(intent);
            }
        });

        button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View view) {
    
    
                Intent intent = new Intent(action2);
                sendBroadcast(intent);
            }
        });
    }
    protected void onDestroy(){
    
    
        super.onDestroy();
        unregisterReceiver(clickReceiver);
    }
    class ClickReceiver extends BroadcastReceiver {
    
    
        @Override
        public void onReceive(Context context, Intent intent){
    
    
            if(intent.getAction().equals(action1))
                Toast.makeText(context, "Receiver button1 finished",Toast.LENGTH_SHORT).show();
            else if(intent.getAction().equals(action2))
                Toast.makeText(context, "Receiver button2 finished",Toast.LENGTH_SHORT).show();
            
        }
    }
}

静态广播

两者的差异在AndroidManifest.xml,不受Activity生命周期影响,即使进程被杀死,仍然能收到广播

AndroidManifest.xml


     <receiver
            android:name=".StaticReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.button.click1"/>
            </intent-filter>
     </receiver>

 //发送前指定包名和类名
 intent.setComponent(new ComponentName("com.example.javalearn",
                        "com.example.javalearn.StaticReceiver"));

public class StaticReceiver extends BroadcastReceiver {
    
    
    @Override
    public void onReceive(Context context, Intent intent) {
    
    
        Toast.makeText(context, "Receiver finished",Toast.LENGTH_SHORT).show();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40405527/article/details/127909947