android发送和接收广播例子

一、activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送广播"
        tools:ignore="MissingConstraints" />

</androidx.constraintlayout.widget.ConstraintLayout>

二、MainActivity和MyReceiver类

 MainActivity

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button button;


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

        //监听
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("broadcast");
                intent.putExtra("message","你妈喊你回家吃饭了");
                //关键!没有下面这一行,android8以上的接收不到广播
                intent.setPackage(getPackageName());
                MainActivity.this.sendBroadcast(intent);
            }
        });
    }
}

 MyReceiver

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //收到广播时,显示一个通知
        System.out.println("收到广播");
        Toast.makeText(context,intent.getStringExtra("message"),Toast.LENGTH_SHORT).show();
    }
}

三、权限

将下列广播权限添加

        <receiver android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="broadcast"/>
            </intent-filter>
        </receiver>

示例:点击发送广播按钮后会接收广播内容的文字。

猜你喜欢

转载自blog.csdn.net/i__saber/article/details/130919670