内部广播:
1、静态注册
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static class MyReceiver extends BroadcastReceiver//作为内部类的广播接收者
{
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals("com.refresh"))
{
Log.i("MainActivity","成功收到广播");
}
}
}
}
需在清单文件中写:
<receiver android:name="com.example.brocastdemo.MainActivity$MyReceiver" >
<intent-filter >
<action android:name="com.aaa"/>
</intent-filter>
</receiver>
注:内部类在声明时一定要写成静态内部类(class关键字前加上static) ,否则会报 java.lang.InstantiationException: can’t instantiate class com.example.brocastdemo.MainActivity$MyReceiver; no empty constructor
2、动态注册(推荐)
//广播接收者
public class MainActivity extends Activity
{
private RefreshBacklogReceiver receiver = null;
public class RefreshBacklogReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("refresh.backlog")) {
System.out.println("发送广播成功***");
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在onCreate()注册广播
receiver = new RefreshBacklogReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("refresh.backlog");
getActivity().registerReceiver(receiver, filter);
}
//在onStop()方法中取消注册的广播
unregisterReceiver(receiver );
}
//在需要发送广播的方法中
//发送广播:
Intent intent = new Intent();
intent.setAction("refresh.backlog");
sendBroadcast(intent);