Android 19+;应用程序编程接口

Android 19+;应用程序编程接口,android,broadcastreceiver,Android,Broadcastreceiver,我很抱歉,如果这是一个重复的职位,但相信我,我做了很多搜索。早在Android2.2中,我就有一个应用程序,它带有一个静态广播接收器,每次收到新的文本消息时都会被调用,而不管应用程序的状态如何 现在,我正试图有同样的行为,但在安卓5上(我相信这是4.4之后的事情)。一旦我的应用从最近的应用关闭,静态接收器就停止工作 这就是安卓现在的工作方式吗?我在stackoverflow上找到了一个答案,就是这样,但我没有看到任何文档 也许这里缺少一些东西: <receiver

我很抱歉,如果这是一个重复的职位,但相信我,我做了很多搜索。早在Android2.2中,我就有一个应用程序,它带有一个静态广播接收器,每次收到新的文本消息时都会被调用,而不管应用程序的状态如何

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

这就是安卓现在的工作方式吗?我在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>


如果是这样,那么我唯一的想法就是监听启动事件并启动一个服务来处理我需要的信息。

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

首先,您需要获得“接收”SMS权限,因此请将其放入您的清单中:

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

你可以在这篇博文中找到更多细节。

我应该说我正在用安卓5在小米R.Note 3设备上进行测试

看起来小米有一个安全应用程序,可以控制几乎所有的东西。
同志,谢谢你的回答。这可以正常工作,但只要我从最近的应用列表中刷下应用,它就会停止工作。就像android取消注册静态侦听器一样。即使我的应用程序已关闭,我也希望获得活动。啊哈,在这种情况下,不幸的是,正如我所看到的,这是不可能的。检查一下这个问题谢谢同志。我要买啤酒。我不知道他们为什么做出这样的改变。限制可能性。。。
<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 ...
        }
    }
}