赶上接收短信的那一刻

时间:2017-06-05 08:23:20

标签: android broadcastreceiver sms

我正在创建一个需要读取传入短信的应用程序。不需要保存到SMS提供商 - 只需在收到短信时显示祝酒。

<receiver android:name=".SmsHandler"
        android:permission="android.permission.BROADCAST_SMS">
        <intent-filter android:priority="2147483647">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

接收机

public class SmsHandler extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Receive sms", Toast.LENGTH_LONG).show();
    }
}

接收器在app运行时工作,如果app kill,接收器不能呼叫。

我知道使用Android KitKat,您需要指定使用短信的默认应用程序。但是,如果要将SMS保存到SMS提供程序,则必须执行此操作。如果您需要抓住接收短信的时刻,则不需要这样做。

当应用程序被杀死时,我该怎么做才能使接收器工作?

更新

我尝试使用该服务注册BroadcastReceiver

public class AlarmService extends Service {
private static BroadcastReceiver SmsHandler;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate()
{
    registerScreenOffReceiver();
}

@Override
public void onDestroy()
{
    unregisterReceiver(SmsHandler);
    SmsHandler = null;
}

private void registerScreenOffReceiver()
{
    SmsHandler = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "Receive sms", Toast.LENGTH_LONG).show();
        }
    };
    IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(SmsHandler, filter);
}

}

0 个答案:

没有答案