适用于SMS的Android静态广播接收器(当应用程序关闭时)在19+ api中

时间:2016-06-24 16:12:27

标签: android broadcastreceiver

如果这是一个重复的帖子,我很抱歉,但相信我,我做了很多搜索。回到android 2.2我有一个静态广播接收器的应用程序,无论应用程序状态如何,每次收到新的文本消息时都会调用它。

现在,我试图有相同的行为,但在Android 5(我相信这是4.4后的事情)。一旦我的应用程序从最近的应用程序关闭,静态接收器就会停止工作。

Android现在如何运作?我在stackoverflow上找到了一个答案,说是这样,但我没有看到任何文档。

这里可能缺少一些东西:

        <receiver
        android:name="com.dimitar.android.test.comm.ControlMessagesReceiver"   
        android:exported="true"      
        android:enabled="true"
        android:permission="android.permission.BROADCAST_SMS" >
        <intent-filter>                
            <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
        </intent-filter>
    </receiver>

如果是这样,那么我唯一的想法是听取启动事件并启动服务来处理我需要的东西。

2 个答案:

答案 0 :(得分:2)

SMS有一些变化。请检查此示例以正确使用BroadcastReceiver进行SMS。

首先,您需要RECEIVE_SMS权限,因此请将其放入清单中:

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

将接收器配置添加到AndroidManifest.xml:

<receiver
    android:name=".SmsReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

最后,实现接收器类:

public class SmsReceiver extends BroadcastReceiver {
    private String TAG = SmsReceiver.class.getSimpleName();

    public SmsReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // Get the data (SMS data) bound to intent
        Bundle bundle = intent.getExtras();

        SmsMessage[] msgs = null;
        if (bundle != null) {
            // Retrieve the SMS Messages received
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];

            // your code here ...
        }
    }
}

您可以在此博文中找到更多详细信息&#34; Android Send and Receive SMS&#34;。

答案 1 :(得分:0)

我应该说我正在测试小米R. Note 3设备与android 5。

看起来小米有一个安全应用程序可以控制几乎所有东西。 见another question and answer here