Android学习--广播使用

    xiaoxiao2023-10-23  150

           时光不知不觉在指尖划过,造化弄人,如今又重新开始学习Android。今天主要学习Broadcast Receiver用法,记录一下自己的学习过程。

           广播的注册方式分为动态注册和静态注册。

    1、动态注册

    1)主MainActivity中先定义一个NetworkChangeReceiver 继承BroadcastReceiver,并复写onReceive()方法,然后创建intentFilter 和networkChangeReceiver对象,通过registerReceiver()注册广播

    package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if(null!= networkInfo && networkInfo.isAvailable()){ Toast.makeText(MainActivity.this, "network is available!", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(MainActivity.this, "network is unavailable!", Toast.LENGTH_SHORT).show(); } } } }

    在Manifest.xml文件添加权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    在模拟器(或android手机)中更改数据网络方式(打开或禁用),效果如下

     

    2、静态注册

    package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete!", Toast.LENGTH_LONG).show(); throw new UnsupportedOperationException("Not yet implemented"); } }

    在Manifest.xml文件添加intent-filter及相应权限

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name=".BootCompleteReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>

    系统广播

    重启模拟器或手机,即可

    3、自定义广播

    package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Toast.makeText(context, "received in MyBroadcastReceiver!", Toast.LENGTH_LONG).show(); } }

    在Manifest.xml文件注册广播添加intent-filter

    <receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter> </receiver>

    在主MainActivity中添加button用来发送广播(在布局文件中添加一个button)

    Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); sendBroadcast(intent); } });

    显示效果:

     

     

    最新回复(0)