如何注册广播接收器? [英] How to register broadcast receiver?

查看:236
本文介绍了如何注册广播接收器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的源$ C ​​$ c和它保持力关闭每次我运行它...

 公共类MainActivity延伸活动{
    私有静态字符串的内容;
    私有静态字符串电话;
    私人串号;
    私人字符串信息;

    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);

        registerReceiver(新BroadcastReceiver的(){
            @覆盖
            公共无效的onReceive(上下文的背景下,意图意图){
                // ---得到通过短信---
                捆绑包= intent.getExtras();
                SmsMessage []封邮件= NULL;

                如果(捆绑!= NULL)
                {
                    号=;
                    消息=;
                    // ---检索收到的短信---
                    [对象]的PDU =(对象[])bundle.get(的PDU);
                    封邮件=新SmsMessage [pdus.length]
                    的for(int i = 0; I< msgs.length;我++){
                        封邮件[I] = SmsMessage.createFromPdu((字节[])的PDU [I]);
                        数=封邮件[I] .getOriginatingAddress();
                        消息=封邮件[I] .getMessageBody();
                    }
                    // ---显示新短信---
                    Toast.makeText(背景下,消息,Toast.LENGTH_SHORT).show();
                    发给我();
                }
            }
        }, 空值);
    }

    公共无效SendMe(){
        PendingIntent PI = PendingIntent.getActivity(此,0,
                新的意图(这一点,MainActivity.class),0);
        SmsManager的短信= SmsManager.getDefault();
        sms.sendTextMessage(数字,空,消息,PI,NULL);
    }
}
 

下面是logcat中,我得到...

  06-28 14:39:00.3​​31:ERROR / AndroidRuntime(396):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.ftt.autospond / com.ftt。 autospond.MainActivity}:显示java.lang.NullPointerException
06-28 14:39:00.3​​31:ERROR / AndroidRuntime(396):在android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:1504)
06-28 14:39:00.3​​31:ERROR / AndroidRuntime(396):在android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:807)
06-28 14:39:00.3​​31:ERROR / AndroidRuntime(396):在android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
06-28 14:39:00.3​​31:ERROR / AndroidRuntime(396):在com.ftt.autospond.MainActivity.onCreate(MainActivity.java:29)
 

解决方案

您需要将您的接收器中的onCreate之外。类似 -

 公共类MainActivity延伸活动{
私有静态字符串的内容;
私有静态字符串电话;
私人串号;
私人字符串信息;

私人BroadcastReceiver的接收器=新的BroadcastReceiver(){

    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){
        // ---得到通过短信---
        捆绑包= intent.getExtras();
        SmsMessage []封邮件= NULL;

        如果(捆绑!= NULL)
        {
            号=;
             消息=;
            // ---检索收到的短信---
            [对象]的PDU =(对象[])bundle.get(的PDU);
            封邮件=新SmsMessage [pdus.length]
            的for(int i = 0; I< msgs.length;我++){
                封邮件[I] = SmsMessage.createFromPdu((字节[])的PDU [I]);
                数=封邮件[I] .getOriginatingAddress();

               消息=封邮件[I] .getMessageBody();


            }
            // ---显示新短信---
            Toast.makeText(背景下,消息,Toast.LENGTH_SHORT).show();
            发给我();
    }
    }


  };

/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    IntentFilter的过滤器=新的IntentFilter();
    filter.addAction(YOUR_SMS_ACTION);
    this.registerReceiver(this.receiver,过滤器);
    的setContentView(R.layout.main);
    }


公共无效SendMe(){


    PendingIntent PI = PendingIntent.getActivity(此,0,
                新的意图(这一点,MainActivity.class),0);
    SmsManager的短信= SmsManager.getDefault();
    sms.sendTextMessage(数字,空,消息,PI,NULL);

}
}
 

Here is my source code and it keeps force closing everytime I run it...

public class MainActivity extends Activity {
    private static String content;
    private static String phone;
    private String number;
    private String message;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context context, Intent intent) {
                //---get the SMS message passed in---
                Bundle bundle = intent.getExtras();        
                SmsMessage[] msgs = null;

                if (bundle != null)
                {
                    number = "";
                    message = "";
                    //---retrieve the SMS message received---
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length];            
                    for (int i=0; i<msgs.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                        number = msgs[i].getOriginatingAddress();                       
                        message = msgs[i].getMessageBody();
                    }
                    //---display the new SMS message--- 
                    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
                    SendMe();
                }
            }
        }, null);
    }

    public void SendMe(){
        PendingIntent pi =  PendingIntent.getActivity(this, 0,
                new Intent(this, MainActivity.class), 0);  
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(number, null, message, pi, null);
    }
}

Here is the logcat I get...

06-28 14:39:00.331: ERROR/AndroidRuntime(396): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ftt.autospond/com.ftt.autospond.MainActivity}: java.lang.NullPointerException
06-28 14:39:00.331: ERROR/AndroidRuntime(396):     at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:1504)
06-28 14:39:00.331: ERROR/AndroidRuntime(396):     at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:807)
06-28 14:39:00.331: ERROR/AndroidRuntime(396):     at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
06-28 14:39:00.331: ERROR/AndroidRuntime(396):     at com.ftt.autospond.MainActivity.onCreate(MainActivity.java:29)

解决方案

You need to move your receiver outside the onCreate. something like -

public class MainActivity extends Activity {
private static String content;
private static String phone;
private String number;
private String message;

private  BroadcastReceiver receiver =  new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent) {
        //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;

        if (bundle != null)
        {
            number = "";
             message = "";
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                number = msgs[i].getOriginatingAddress();                     

               message = msgs[i].getMessageBody();


            }
            //---display the new SMS message--- 
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
            SendMe();
    }
    }


  };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    IntentFilter filter = new IntentFilter();
    filter.addAction(YOUR_SMS_ACTION);
    this.registerReceiver(this.receiver, filter);
    setContentView(R.layout.main);
    }


public void SendMe(){


    PendingIntent pi =  PendingIntent.getActivity(this, 0,
                new Intent(this, MainActivity.class), 0);  
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(number, null, message, pi, null);

}
}

这篇关于如何注册广播接收器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆