任何人都可以告诉我是否有可能醒来"我的Android服务一旦收到短信活动?我的意思是,每当收到短信时,都会有一个系统范围的广播。我可以拦截这个广播来开始我自己的后台服务吗?我知道,在后台永久运行我的服务是不可能的(更不用说它是一个糟糕的设计实践)。
任何帮助都将受到高度赞赏!
编辑:在原始问题中添加更多细节。我的广播接收器将被包含在服务类中。但在内存紧缩的情况下,Android有可能会终止我的后台服务。在这种情况下,即使有传入的短信,我的服务也不会被解雇。我该如何处理这种情况?这是该问题的主要目的。我知道在后台永久运行我的服务是不可能的(或者是否可能?如果我有root访问权限?)
答案 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" />