activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送一个普通广播"
android:id="@+id/button_normal"
android:onClick="sendNormalClick"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送一个有序广播"
android:onClick="sendOrderClick"
android:id="@+id/button_order"
android:layout_below="@+id/button_normal"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/button_normal"
android:layout_alignEnd="@+id/button_normal" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送一个粘性广播"
android:id="@+id/button"
android:onClick="sendStickyClick"
android:layout_below="@+id/button_order"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/button_order"
android:layout_alignEnd="@+id/button_order" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动接收粘性广播的Activity"
android:id="@+id/button2"
android:onClick="openStickyActivityClick"
android:layout_below="@+id/button"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button" />
</RelativeLayout>
MainActivity.java
package com.example.administrator.myapplication;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private MyReceiver2 receiver2 = new MyReceiver2();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//在该方法中进行广播注册
@Override
protected void onResume() {
//运行完可以交互
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("com.codingke.action.MY_BROADCAST");
registerReceiver(receiver2, filter);
//立即获取当前电量
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("android.intent.action.BATTERY_CHANGED");
Intent batteryIntent=getApplicationContext().registerReceiver(null,intentFilter);
int curr=batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);//当前电量
int total=batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE,1);//总电量
int percent=curr*100/total;
Toast.makeText(this, "当前电量为" + percent, Toast.LENGTH_SHORT).show();
}
//该方法中解除广播注册
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver2);
}
//发送一个普通的广播
public void sendNormalClick(View v) {
Intent intent = new Intent("com.codingke.action.MY_BROADCAST");
intent.putExtra("info", "我们很有缘,终于对接了!");
this.sendBroadcast(intent);
}
// 发送一个有序广播
public void sendOrderClick(View v) {
Intent intent=new Intent("com.codingke.action.MY_BROADCAST2");
//参数:intent,接收权限
this.sendOrderedBroadcast(intent, null);
}
//发送一个粘性广播
public void sendStickyClick(View v)
{
Intent intent=new Intent("com.codingke.action.MY_BROADCAST3");
this.sendStickyBroadcast(intent);
}
public void openStickyActivityClick(View v)
{
Intent intent=new Intent(this,MainActivity2.class);
startActivity(intent);
}
}
MyReceiver1.java--普通广播
<receiver
android:name=".MyReceiver1"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.codingke.action.MY_BROADCAST" />
</intent-filter>
</receiver>
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/*自定义的广播接收器*/
public class MyReceiver1 extends BroadcastReceiver {
public MyReceiver1() {
}
//运行接收的方法 同一个程序应用里
@Override
public void onReceive(Context context, Intent intent) {
String info=intent.getStringExtra("info");
Toast.makeText(context,info,Toast.LENGTH_SHORT).show();
}
}
MyReceiver2.java--普通广播
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver2 extends BroadcastReceiver {
public MyReceiver2() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"动态注册的广播接收器",Toast.LENGTH_SHORT).show();
}
}
注册代码在MainActivity,动态注册
IntentFilter filter = new IntentFilter(); filter.addAction("com.codingke.action.MY_BROADCAST");
registerReceiver(receiver2, filter);
MyReceiver3.java--有序广播--设置优先级priority
<receiver
android:name=".MyReceiver3"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="com.codingke.action.MY_BROADCAST2" />
</intent-filter>
</receiver>
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class MyReceiver3 extends BroadcastReceiver {
public MyReceiver3() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"有序广播-1",Toast.LENGTH_SHORT).show();
//给下一个广播传递Bundle
Bundle data=new Bundle();
data.putString("info","流离之人追逐幻影,广播-1");
this.setResultExtras(data);
//中断有序广播,只有有序广播能中断,
// this.abortBroadcast();
}
}
MyReceiver4.java--有序广播
<receiver
android:name=".MyReceiver4"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="200">
<action android:name="com.codingke.action.MY_BROADCAST2" />
</intent-filter>
</receiver>
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class MyReceiver4 extends BroadcastReceiver {
public MyReceiver4() {
}
@Override
public void onReceive(Context context, Intent intent) {
Bundle data= getResultExtras(false);
String info=data.getString("info");
Toast.makeText(context, "有序广播-2--"+info, Toast.LENGTH_SHORT).show();
}
}
MyReceiver5.java--粘性广播
清单文件权限:
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver5 extends BroadcastReceiver {
public MyReceiver5() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"接收一个粘性的广播",Toast.LENGTH_SHORT).show();
}
}
MainActivity2.java
package com.example.administrator.myapplication;
import android.content.IntentFilter;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
public class MainActivity2 extends ActionBarActivity {
private MyReceiver5 receiver5 =new MyReceiver5();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
@Override
protected void onResume() {
super.onResume();
IntentFilter filter=new IntentFilter("com.codingke.action.MY_BROADCAST3");
registerReceiver(receiver5,filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver5);
}
}
MyReceiver6.java--开机广播
清单文件权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".MyReceiver6"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver6 extends BroadcastReceiver {
public MyReceiver6() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"开机啦",Toast.LENGTH_SHORT).show();
}
}
MyReceiver7.java--网络状态改变广播
清单文件权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver
android:name=".MyReceiver7"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;
/*网络状态改变*/
public class MyReceiver7 extends BroadcastReceiver {
public MyReceiver7() {
}
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info= cm.getActiveNetworkInfo();//活动的网络信息
if (info!=null)
{
String name=info.getTypeName();
Toast.makeText(context,name,Toast.LENGTH_SHORT).show();
}
}
}
MyReceiver8.java--(1)监测电量变化广播(2)立刻获取电量
(1)
清单文件:
<receiver
android:name=".MyReceiver8"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"></action>
</intent-filter>
</receiver>
package com.example.administrator.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.widget.Toast;
//监测电量变化
public class MyReceiver8 extends BroadcastReceiver {
public MyReceiver8() {
}
@Override
public void onReceive(Context context, Intent intent) {
int curr=intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);//当前电量
int total=intent.getIntExtra(BatteryManager.EXTRA_SCALE,1);//总电量
int percent=curr*100/total;
Toast.makeText(context,"当前电量为"+percent,Toast.LENGTH_SHORT).show();
}
}
(2)
在MainAvtivity.java 的onResume方法中
//立即获取当前电量
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("android.intent.action.BATTERY_CHANGED");
Intent batteryIntent=getApplicationContext().registerReceiver(null,intentFilter);
int curr=batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);//当前电量
int total=batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE,1);//总电量
int percent=curr*100/total;
Toast.makeText(this, "当前电量为" + percent, Toast.LENGTH_SHORT).show();
AndroidMainifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.myapplication">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".MyReceiver1"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.codingke.action.MY_BROADCAST" />
</intent-filter>
</receiver>
<!--
<receiver
android:name=".MyReceiver2"
android:enabled="true"
android:exported="true"></receiver>
-->
<receiver
android:name=".MyReceiver3"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="com.codingke.action.MY_BROADCAST2" />
</intent-filter>
</receiver>
<receiver
android:name=".MyReceiver4"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="200">
<action android:name="com.codingke.action.MY_BROADCAST2" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity2" />
<receiver
android:name=".MyReceiver6"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=".MyReceiver7"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<receiver
android:name=".MyReceiver8"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"></action>
</intent-filter>
</receiver>
</application>
</manifest>