Android 广播(内部类)

1.广播定义在一个单独的文件中

源码:

public class MessageReceiver extends BroadcastReceiver{
    
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
        
        }
    }
}

在Manifest中注册:

<receiver android:name=".MessageReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
</receiver>

使用代码注册:

//生成广播处理  
MessageReceiver  smsBroadCastReceiver = new MessageReceiver ();  
//实例化过滤器并设置要过滤的广播  
IntentFilter intentFilter = new IntentFilter();  
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");  
  
//注册广播  
this.registerReceiver(smsBroadCastReceiver, intentFilter);  

注销广播:

unregisterReceiver(smsBroadCastReceiver);

2.广播是内部类

public class SettingForSMS extends PreferenceActivity{
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.sms_setting);
    }
    
    public static class MessageChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Log.i(tag, "onReceive");
        }
    }
}

注意定义的过程中必须声明为static,不然会找不到

在Manifest中注册:

<receiver android:name=".SettingForSMS$MessageChangeReceiver">
            <intent-filter>
                <action android:name="com.ginwave.message_changed"/>
            </intent-filter>
</receiver>

注意内部类使用$符号而不是.,使用.会出现类找不到异常

在程序内注册,register是放在onCreate中,unregister是放在onDestroy中。

smsBroadCastReceiver = new MessageChangeReceiver ();  
        //实例化过滤器并设置要过滤的广播  
        IntentFilter intentFilter = new IntentFilter();  
        intentFilter.addAction("com.ginwave.message_changed");  
          
        //注册广播  
        this.registerReceiver(smsBroadCastReceiver, intentFilter); 
unregisterReceiver(smsBroadCastReceiver);

 注意:如果使用getResource()方法,要使用context.getResource()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值