Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在主活动中注册接收者?_Android_Broadcastreceiver_Android Activity - Fatal编程技术网

Android 如何在主活动中注册接收者?

Android 如何在主活动中注册接收者?,android,broadcastreceiver,android-activity,Android,Broadcastreceiver,Android Activity,我有一个SmsReceiver类,我想在主活动中注册它,我应该怎么做 我是Android新手。要让服务接收短信,请执行以下步骤: 更新清单以授予应用程序接收SMS的权限 (写短信、读短信、接收短信) 不要使用receiver intent筛选器更新清单!(哪个 每个在线示例代码似乎都可以) 在服务中,在服务类中创建嵌套的BroadcastReceiver类 private class SMSreceiver extends BroadcastReceiver { private fina

我有一个
SmsReceiver
类,我想在主活动中注册它,我应该怎么做


我是Android新手。

要让服务接收短信,请执行以下步骤:

  • 更新清单以授予应用程序接收SMS的权限 (写短信、读短信、接收短信)
  • 不要使用receiver intent筛选器更新清单!(哪个 每个在线示例代码似乎都可以)
  • 在服务中,在服务类中创建嵌套的BroadcastReceiver类

    private class SMSreceiver extends BroadcastReceiver
    {
        private final String TAG = this.getClass().getSimpleName();
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Bundle extras = intent.getExtras();
    
            String strMessage = "";
    
            if ( extras != null )
            {
                Object[] smsextras = (Object[]) extras.get( "pdus" );
    
                for ( int i = 0; i < smsextras.length; i++ )
                {
                    SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
    
                    String strMsgBody = smsmsg.getMessageBody().toString();
                    String strMsgSrc = smsmsg.getOriginatingAddress();
    
                    strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;                    
    
                    Log.i(TAG, strMessage);
                }
    
            }
    
        }
    
    }
    
  • 就这样

    注意:
    encase您想知道为什么我没有从一个单独的BroadcastReceiver类中绑定到我的服务-它不起作用,因为
    bindService()
    不可用。

    您可以做两件事:

  • 清单中创建并定义
    BroadcastReceiver
  • 在代码中创建并注册
    广播接收器
  • 对于选项2(您正在询问):

    在代码(MyBroadcastReceiver)中创建一个
    BroadcastReceiver
    。 在您的
    活动范围内声明MyBroadcastReceiver

    MyBroadcastReceiver mMyBroadcastReceiver;
    
    通过以下方式在
    活动中注册
    广播接收器

    IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
    this.registerReceiver(mMyBroadcastReceiver, filter);
    

    当您要求在您的
    main活动中注册
    BroadcastReceiver
    时,它适用于
    registerReceiver codewise-in main活动

    下面是代码的样子==>

    public class MainActivity extends Activity 
    {
    BroadcastReceiver smsReceiver;
    private IntentFilter myFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
    
       protected void onCreate(Bundle savedInstanceState) 
       {
        super.onCreate(savedInstanceState);
        registerReceiver(smsReceiver, myFilter); // register BroadCastReceiver at time of initialization of Activity with proper Intent-Filter
       }
    
    @Override
      protected void onPause() 
       {
        unregisterReceiver(smsReceiver); // UnRegister BroadCastReceiver as you no longer have your activity at Foreground -- Saving CPU & Battery Drainage
        super.onPause();
       }
    
     @Override
       protected void onResume() 
       {
        registerReceiver(smsReceiver, myFilter); // Register BroadCastReceiver Once again as your activity comes from pause to forground state again.
        super.onResume();
       }
    
      smsReceiver = new BroadcastReceiver() //Implementation of your BroadCastReceiver
      {
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
           // Do whatever you like as sms is received and caught by these BroadCastReceiver
            Toast.makeText(context, "SMS Received", Toast.LENGTH_LONG).show();          
        }
      };
     }
    

    希望这对API级别19及以上的用户有所帮助

     IntentFilter smsFilter = new IntentFilter();
     smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
    registerReceiver(this.receiver, filter);
    

    你可以看看这篇文章,关于这个话题有很多答案。检查,和。可能的副本
    private BroadcastReceiver receiver = new BroadcastReceiver() {
    
       @Override
       public void onReceive(Context context, Intent intent) {
           //some action
       }
    };
    
    IntentFilter filter = new IntentFilter("YOUR_ACTION");
    registerReceiver(receiver, filter);
    
     IntentFilter smsFilter = new IntentFilter();
     smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
    registerReceiver(this.receiver, filter);