zoukankan      html  css  js  c++  java
  • Android 使用BroadcastReceiver的几种方法

    发送自定义广播

    全局广播

    • 发送标准广播

    1.定义广播接收器.(在发送广播前,需要先定义一个广播接收器,不然发了也是白发)

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

    2.在AndroidManifest.xml里面注册.这里我们会让我们定义好的广播接收器接收一条为"com.example.broadcasttest.MY_BROADCAST"的自定义广播.

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

    3.然后我们写一个触发事件手动的把广播发出去.

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

    1.新建一个广播接收器.

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

    2.我们在AndroidManifest.xml文件对广播进行注册.

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

    3.然后我们写一个触发事件手动的把广播发出去.

    button.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");		sendOrderedBroadcast(intent, null);
    			}
    		});
    

    看到这里一定有人让位标准广播和有序广播是相同的,其实不是.sendOrderedBroadcast(intent, null);"这里我们的方法该成了sendOrderedBroadcast();还有不要忘记了这个时候我们发送的是有序广播,有序广播是可以截断的.优先级高的广播接收器可以截断广播,以阻止其继续传播.

    • 设置广播接收器的优先级,android:priority="";
    <receiver 
     android:name="com.example.broadcasttest.MyBroadcastReceiver" >
                <intent-filter android:priority="100">
                    <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
                </intent-filter>
            </receiver>
    
    • 截断广播
    @Override
    	public void onReceive(Context context, Intent intent) {
    		abortBroadcast();	//截断广播
    	}
    

    使用本地广播

    
    public class MainActivity extends Activity {
    	private IntentFilter intentFilter;
    	private Button button;
    	private LocalBroadcastManager localBroadcastManager;
    	private LocalReceiver localReceiver;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		requestWindowFeature(Window.FEATURE_NO_TITLE);
    		setContentView(R.layout.activity_main);
    		localBroadcastManager=LocalBroadcastManager.getInstance(this);	//获取实例
    		button=(Button) findViewById(R.id.btn);
    		button.setOnClickListener(new OnClickListener() {
    		
    			@Override
    			public void onClick(View v) {
    				Intent intent=new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
    				localBroadcastManager.sendBroadcast(intent);	//发送本地广播
    			}
    		});
    		intentFilter=new IntentFilter();
    		intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
    		localReceiver=new LocalReceiver();
    		localBroadcastManager.registerReceiver(localReceiver, intentFilter);	//注册本地广播监听器
    	}
    	
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		localBroadcastManager.unregisterReceiver(localReceiver);
    	}
    	
    	
    	class LocalReceiver extends BroadcastReceiver{
    	
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			Toast.makeText(context, "1", Toast.LENGTH_LONG).show();
    		}
    	}
    }
    
    

    可以看到他和我们的上面提到的差不多.只不过现在是首先通过LocalBroadcastManager的getInstance(this);得到它的实例,然后在注册广播接收器的时候调用的是localBroadcastManager的registerReceiver();方法.在发送广播的时候调用的是localBroadcastManager的sendBroadcast(intent);方法.

  • 相关阅读:
    超出范围样式...
    CSS 滚动条设置
    js 数组全包含
    vue字段为空过滤器
    window.open 打开的新页签会携带sessionStorage中的数据
    ES6的解构赋值与深拷贝和浅拷贝
    vue中怎么处理多个单选框,且单选框互不影响的方案
    h5项目中关于ios手机软键盘导致页面变形的完美解决方案
    vue项目中关于微信分享的坑,以及安卓和ios获取location.href不同的处理
    navicat连接mysql报错1251的解决方法
  • 原文地址:https://www.cnblogs.com/stareblankly/p/5076354.html
Copyright © 2011-2022 走看看