从系统的SMS广播接收器启动Android服务

时间:2016-07-04 10:29:32

标签: android service smsmanager android-broadcastreceiver wakeup

任何人都可以告诉我是否有可能醒来"我的Android服务一旦收到短信活动?我的意思是,每当收到短信时,都会有一个系统范围的广播。我可以拦截这个广播来开始我自己的后台服务吗?我知道,在后台永久运行我的服务是不可能的(更不用说它是一个糟糕的设计实践)。

任何帮助都将受到高度赞赏!

编辑:在原始问题中添加更多细节。我的广播接收器将被包含在服务类中。但在内存紧缩的情况下,Android有可能会终止我的后台服务。在这种情况下,即使有传入的短信,我的服务也不会被解雇。我该如何处理这种情况?这是该问题的主要目的。我知道在后台永久运行我的服务是不可能的(或者是否可能?如果我有root访问权限?)

1 个答案:

答案 0 :(得分:0)

创建广播接收器

public class BrodcastReceiverClass extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent) {


        final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {
                final Object[] pdusObj = (Object[]) bundle.get("pdus");
                for (int i = 0; i < pdusObj.length; i++) {
                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                    String senderNum = phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();
                    try {
                        if (senderNum.equals("MD-DOCOMO")){  //SMS Provider Name
                            OTPActivity Sms = new OTPActivity();
                            Sms.recivedSms(message);
                        }
                    } catch (Exception e) {
                    }

                }
            }

        } catch (Exception e) {

        }
    }
} 

在清单中注册BrodcastReceiver

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

调用您的活动,例如您的活动名称是OTPActivity,而不是在您的OTPActivity中写入该代码。

public void recivedSms(String message) {
        try {
            Log.d("message is receive", message);



        } catch (Exception e) {
            Log.e("message not receive", e.getMessage() + "");
        }
    }

在清单读取短信中添加权限

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