启动广播reciver当过新的短信息到达 [英] Starting the broadcast reciver when ever new sms arrives

查看:110
本文介绍了启动广播reciver当过新的短信息到达的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个远程服务当中,呼吁广播reciver这反过来又拨打了报警经理触发报警,但我想通过rempte服务触发reciver当过新邮件到达

这件作品code是如下:

  @覆盖
                公众的IBinder onBind(意向为arg0){
                    Log.d(的getClass()getSimpleName(),onBind());                    返回myRemoteServiceStub;
                }                    私人IMyRemoteService.Stub myRemoteServiceStub =新IMyRemoteService.Stub(){
                        公众诠释getCounter()将抛出RemoteException {
                // startAlarmNotification();                            IntentFilter的过滤器=新的IntentFilter();
                            filter.addAction(android.provider.Telephony.SMS_RECEIVED);
                            filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED);
                            filter.addAction(your_action_strings); //进一步
                            filter.addAction(your_action_strings); //进一步                            registerReceiver(接收器,过滤器);
                            返回柜台;
                        }
                    };                    @覆盖
                    公共无效的onCreate(){
                        super.onCreate();
                        Log.d(的getClass()getSimpleName(),的onCreate()。);
                    }                    @覆盖
                    公共无效的onDestroy(){
                        super.onDestroy();
                        serviceHandler.removeCallbacks(myTask);
                        的ServiceHandler = NULL;
                        Log.d(的getClass()getSimpleName(),的onDestroy()。);
                    }                    @覆盖
                    公共无效调用onStart(意向意图,诠释startId){
                        super.onStart(意向,startId);
                        的ServiceHandler =新的处理程序();
                        serviceHandler.postDelayed(myTask,1000L);
                        Log.d(的getClass()getSimpleName(),在onStart()。);
                    }                    类任务实现Runnable {
                        公共无效的run(){
                            ++计数器;
                            serviceHandler.postDelayed(这一点,1000L);
                            Log.i(的getClass()getSimpleName()中的run方法递增计数器);
                        }
                    }
                    公共无效startAlarmNotification(){
                      台历挂历= Calendar.getInstance();
                      calendar.add(Calendar.MINUTE,1);
                      意图alarmintent =新意图(RemoteService.this,AlarmReciver.class);
                      发件人的PendingIntent = PendingIntent.getBroadcast(这一点,notificationId,alarmintent,PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
                      AlarmManager AM =(AlarmManager)getSystemService(ALARM_SERVICE);
                // am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),60 * 1000,发送者);
                          am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),发送者);
                    }
                    私人最终广播接收器接收器=新的广播接收器(){
                           @覆盖
                           公共无效的onReceive(上下文的背景下,意图意图){
                              字符串行动= intent.getAction();
                              如果(action.equals(android.provider.Telephony.SMS_RECEIVED)){
                                //短信收到的行动
                                        startAlarmNotification();
                                        unregisterReceiver(接收机);
                              }
                              否则如果(action.equals(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED)){
                                   //为手机状态改变行动
                              }
                           }
                        };


解决方案

每当你获得SMS运行你code是工作,如果你的服务正在运行...所以低于code。您可以修改此像接收短信后,你就可以开始服务,并把你的code到33.060.99。

SmsReceiver Java类

 公共类SmsReceiver扩展广播接收器{
    @覆盖
    公共无效的onReceive(上下文的背景下,意图意图){           捆绑额外= intent.getExtras();
           如果(演员== NULL)
           返回;          //要显示吐司每当有短信。
           Toast.makeText(上下文中,收到,Toast.LENGTH_LONG).show();           [对象]的PDU =(对象[])extras.get(的PDU);
           的for(int i = 0; I和LT; pdus.length;我++){
              SmsMessage SMessage = SmsMessage.createFromPdu((字节[])的PDU [I]);
              字符串发件人= SMessage.getOriginatingAddress();
              。字符串体= SMessage.getMessageBody()的toString();
              Toast.makeText(上下文,+发件人+:+体,Toast.LENGTH_SHORT)
                        。显示();            }
           startAlarmNotification();
         }        公共无效startAlarmNotification(){
                      台历挂历= Calendar.getInstance();
                      calendar.add(Calendar.MINUTE,1);
                      意图alarmintent =新意图(RemoteService.this,AlarmReciver.class);
                      发件人的PendingIntent = PendingIntent.getBroadcast(这一点,notificationId,alarmintent,PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
                      AlarmManager AM =(AlarmManager)getSystemService(ALARM_SERVICE);
                // am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),60 * 1000,发送者);
                          am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),发送者);
                    }
     }

在您的清单中做如下code:

 <接收机器人:名字=。SmsReceiver>
                &所述;意图滤光器>
                    <作用机器人:名字=android.provider.Telephony.SMS_RECEIVED/>
                &所述; /意图滤光器>
            < /接收器>

也下方添加权限:

 <使用许可权的android:NAME =android.permission.RECEIVE_SMS/>

I have created a remote service which , is calling a broadcast reciver which in turn call the alarm manager for triggering the alarm , but i want to trigger the reciver through the rempte service when ever a new message arrives

The piece of code is as follows:

     @Override
                public IBinder onBind(Intent arg0) {
                    Log.d(getClass().getSimpleName(), "onBind()");

                    return myRemoteServiceStub;
                }           

                    private IMyRemoteService.Stub myRemoteServiceStub = new IMyRemoteService.Stub() {
                        public int getCounter() throws RemoteException {
                //          startAlarmNotification();

                            IntentFilter filter = new IntentFilter();
                            filter.addAction("android.provider.Telephony.SMS_RECEIVED");
                            filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED);
                            filter.addAction("your_action_strings"); //further more
                            filter.addAction("your_action_strings"); //further more

                            registerReceiver(receiver, filter);
                            return counter;
                        }
                    };

                    @Override
                    public void onCreate() {
                        super.onCreate();
                        Log.d(getClass().getSimpleName(),"onCreate()");
                    }

                    @Override
                    public void onDestroy() {
                        super.onDestroy();
                        serviceHandler.removeCallbacks(myTask);
                        serviceHandler = null;
                        Log.d(getClass().getSimpleName(),"onDestroy()");
                    }

                    @Override
                    public void onStart(Intent intent, int startId) {
                        super.onStart(intent, startId);
                        serviceHandler = new Handler();
                        serviceHandler.postDelayed(myTask, 1000L);
                        Log.d(getClass().getSimpleName(), "onStart()");
                    }

                    class Task implements Runnable {
                        public void run() {
                            ++counter;
                            serviceHandler.postDelayed(this,1000L);
                            Log.i(getClass().getSimpleName(), "Incrementing counter in the run method");
                        }
                    }
                    public void  startAlarmNotification(){
                      Calendar calendar = Calendar.getInstance();
                      calendar.add(Calendar.MINUTE, 1);
                      Intent alarmintent = new Intent(RemoteService.this, AlarmReciver.class);
                      PendingIntent sender = PendingIntent.getBroadcast(this, notificationId, alarmintent,PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
                      AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                //        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),  60 * 1000, sender);
                          am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
                    }


                    private final BroadcastReceiver receiver = new BroadcastReceiver() {
                           @Override
                           public void onReceive(Context context, Intent intent) {
                              String action = intent.getAction();
                              if(action.equals("android.provider.Telephony.SMS_RECEIVED")){
                                //action for sms received
                                        startAlarmNotification();
                                        unregisterReceiver(receiver);


                              }
                              else if(action.equals(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED)){
                                   //action for phone state changed
                              }     
                           }
                        };

解决方案

Your code is working if your service is running... so below code is run whenever you get SMS. you can modify this like after get SMS you can start service and put your code in to servies.

SmsReceiver JAVA Class

    public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

           Bundle extras = intent.getExtras();
           if (extras == null)
           return;

          // To display a Toast whenever there is an SMS.
           Toast.makeText(context,"Recieved",Toast.LENGTH_LONG).show();

           Object[] pdus = (Object[]) extras.get("pdus");
           for (int i = 0; i < pdus.length; i++) {
              SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
              String sender = SMessage.getOriginatingAddress();
              String body = SMessage.getMessageBody().toString();
              Toast.makeText(context, ""+sender+":"+body , Toast.LENGTH_SHORT)
                        .show();

            }
           startAlarmNotification();
         }

        public void  startAlarmNotification(){
                      Calendar calendar = Calendar.getInstance();
                      calendar.add(Calendar.MINUTE, 1);
                      Intent alarmintent = new Intent(RemoteService.this, AlarmReciver.class);
                      PendingIntent sender = PendingIntent.getBroadcast(this, notificationId, alarmintent,PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
                      AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                //        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),  60 * 1000, sender);
                          am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
                    }
     }

in your manifest do below code :

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

also add below permission:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

这篇关于启动广播reciver当过新的短信息到达的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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