Android BroadcastReceiver实例Demo

该文主要讲解Android四大组件之一:BroadcastReceiver的初步使用,和其他三大组件一样,都需要在AndroidManifest.xml文件中注册(当然,广播注册的另一种方式是在代码中)。

实现效果图:

Android BroadcastReceiver实例Demo_第1张图片

源代码:

Android BroadcastReceiver实例Demo_第2张图片

布局文件:

 



    


MainActivity:

 

 

package com.android_broadcastreceiver;

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

public class MainActivity extends Activity {
	private Button button;

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

		button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				/**
				 * 三个广播在manifest.xml文件中的Action设置的都是myaction,所以发送广播的时候,这三个都可以收到广播
				 * 。
				 */
				intent.setAction("myaction");
				intent.putExtra("name", "梅西!!!");
				sendBroadcast(intent);
			}
		});
	}
}


MyBroadcastReceiver:

 

 

 

 

package com.android_broadcastreceiver;

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) {
		String name = intent.getExtras().getString("name");
		Toast.makeText(context, "广播1已发送..."+name, Toast.LENGTH_SHORT).show();
	}

}


MyBroadcastReceiver2:

 

 

 

 

package com.android_broadcastreceiver;

import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
/**
 * 以通知的形式展示广播
 *
 */
public class MyBroadcastReceiver2 extends BroadcastReceiver {
	private NotificationManager manager;

	@Override
	public void onReceive(Context context, Intent intent) {
		manager = (NotificationManager) context
				.getSystemService(Context.NOTIFICATION_SERVICE);
		String name = intent.getExtras().getString("name");

		NotificationCompat.Builder builder = new NotificationCompat.Builder(
				context);
		builder.setTicker("广播2来了!!!");
		builder.setSmallIcon(R.drawable.ic_launcher);
		builder.setContentTitle("电量不足!!!");
		builder.setContentText("电量还剩10%"+"快通知:"+name);
		manager.notify(1001, builder.build());
	}

}


MyBroadcastReceiver3:

 

 

 

 

package com.android_broadcastreceiver;

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

public class MyBroadcastReceiver3 extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		String name = intent.getExtras().getString("name");
		Toast.makeText(context, "广播3已发送..."+name, Toast.LENGTH_SHORT).show();
	}

}

 

 

 

 

 

AndroidManifest.xml:

 




    

    
        
            
                

                
            
        

        
            
                
            
        
        
            
                
            
        
        
            
                
            
        
    

 
比较简单,需要源码的读者可以到我的资源中下载。

 

 

注:

Android 8.0为了优化系统性能,对隐式(注册)广播(即在AndroidManifest.xml中注册的广播)做了一定的限制,即以上的一般情况下无法正常收到发送的广播,针对这一限制,有两种方案可供解决参考:

方法一:显式(注册)广播推荐】(会跟随Activity等销毁而销毁)

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("myaction");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, intentFilter);

方法二:隐式广播发送时添加包名:

Intent intent = new Intent();
intent.setAction("myaction");
intent.putExtra("name", "梅西!!!");
//添加目标应用的包名
intent.setPackage(getPackageName());
sendBroadcast(intent);

 

你可能感兴趣的:(Android,广播相关)