android:靜態廣播和動態廣播


靜態廣播主要是在manifest.xml里面

加入 <receiver android:name=".MyBroadcastReceiver>組件。並給出接收類。

 

<?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.example.mybroadcast">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 靜態注冊廣播接收器 -->
        <receiver
            android:name=".MyBroadcastReceiver">

            <!-- 接收哪些廣播 -->

            <intent-filter>
                <!-- 開機廣播 -->
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <!-- 電量低廣播 -->
                <action android:name="android.intent.action.BATTERY_LOW"/>

            </intent-filter>

        </receiver>

    </application>

</manifest>

 

接收類

package com.example.mybroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import android.widget.TextView;


public class MyBroadcastReceiver extends BroadcastReceiver {
    final String TAG ="ygy";
    TextView mTextView;
    public MyBroadcastReceiver(TextView textView) {
        mTextView = textView;
    }
    public MyBroadcastReceiver() {

    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent != null){
            String action = intent.getAction();
            Log.e(TAG, "onReceive: "+ action );

            // 判斷是什么廣播(是不是我們自己發送的自定義廣播)
            if(TextUtils.equals(action, MainActivity.MY_ACTION)){
                // 獲取廣播攜帶的內容, 可自定義的數據
                String content = intent.getStringExtra(MainActivity.BROADCAST_CONTENT);
                Log.e(TAG, "接收到的action是:"+ action + "\n接收到的內容是:\n" + content );
                if(mTextView != null){
                    mTextView.setText("接收到的action是:"+ action + "\n接收到的內容是:\n" + content);
                }
            }
        }
    }
}

動態廣播,在activity里面注冊了廣播,然后在廣播接收類里面接收。

package com.example.mybroadcast;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
    public static final String MY_ACTION = "com.ygy.demo.good";
    public static final String BROADCAST_CONTENT = "broadcast_content";
    private MyBroadcastReceiver mBroadcastReceiver;
    private EditText mInputEditText;
    private Button mSendBroadcastButton;
    private TextView mResultTextView;

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

        // 用包名做title
        setTitle(getPackageName());
        mInputEditText = findViewById(R.id.inputEditText);
        mSendBroadcastButton = findViewById(R.id.sendBroadcastButton);
        mResultTextView = findViewById(R.id.resultTextView);

        // 新建廣播接收器
        mBroadcastReceiver = new MyBroadcastReceiver(mResultTextView);
       // mBroadcastReceiver = new MyBroadcastReceiver();
        // 注冊廣播接收器

        // 為廣播接收器添加Action
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(MY_ACTION);
        intentFilter.addAction("android.intent.action.SCREEN_OFF");
        intentFilter.addAction("android.intent.action.SCREEN_ON");

        //加上addDataScheme("package")就收不到其他消息了;不加,收不到 android.intent.action.PACKAGE_REMOVED
       // intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
       // intentFilter.addAction("android.intent.action.PACKAGE_INSTALL");
       // intentFilter.addDataScheme("package");

        // 注冊廣播接收器
        registerReceiver(mBroadcastReceiver, intentFilter);


        mSendBroadcastButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 新建廣播
                Intent intent = new Intent(MY_ACTION);
                // 放入廣播要攜帶的數據
                intent.putExtra(BROADCAST_CONTENT, mInputEditText.getText().toString());
                sendBroadcast(intent);
            }
        });

    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消注冊廣播接收器,不然會導致內存泄露
        if(mBroadcastReceiver != null){
            unregisterReceiver(mBroadcastReceiver);
        }
    }
}

按鈕實現的是自定義廣播發送。 app內部的自己發,自己接收。

A 發送 廣播,B 接收廣播。

修改build.gradle 的app包名,然后發送廣播,另外一個未改名的app也能收到他的廣播。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM