【问题标题】:Broadcast receiver is not working in lollipop after application closed from task manager从任务管理器关闭应用程序后,广播接收器无法在棒棒糖中工作
【发布时间】:2016-08-17 14:55:45
【问题描述】:

这是广播接收器。此代码在 kitkat 和 jeallyBean 中工作。在此我们简单地接收传入消息的通知。当任何消息进入移动设备时,它会显示通知。

    public class IncomingSms extends BroadcastReceiver {
    final SmsManager sms = SmsManager.getDefault();
    Notification myNotication;
    NotificationManager nm;
    public void onReceive(Context context, Intent intent) {
        nm = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        final Bundle bundle = intent.getExtras();
        Intent startServiceIntent = new Intent(context, MainActivity.class);

        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 compnum=phoneNumber;
                    String message = currentMessage.getDisplayMessageBody();

                    Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);



                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration);
                    toast.show();
                    if(senderNum.equals(compnum))
                    {

                        Toast.makeText(context,"Come in the loop",Toast.LENGTH_LONG).show();
                        Intent intent2 = new Intent(context,MainActivity.class);

                        PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intent2, 0);

                        Notification.Builder builder = new Notification.Builder(context);

                        builder.setAutoCancel(true);
                        builder.setTicker("this is ticker text");
                        builder.setContentTitle("WhatsApp Notification");
                        builder.setContentText("You have a new message");
                        builder.setSmallIcon(R.drawable.pretty_bullet);
                        builder.setContentIntent(pendingIntent);
                        builder.setOngoing(true);
                        builder.setSubText("This is subtext...");   
                        builder.setNumber(100);
                        builder.build();

                        myNotication = builder.getNotification();
                        nm.notify(50, myNotication);
                    }
                } 
            } 

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" +e);

        }
    }  
}

在我声明的清单中

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

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="ANDROID.PERMISSION.WRITE_SETTINGS"/>
    <receiver android:name=".IncomingSms">
            <intent-filter
                android:priority="1">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
    </receiver>

当应用程序从任务管理器关闭时,这不起作用。但它适用于 jallybean。我想显示应用程序是打开还是关闭的通知。

【问题讨论】:

标签: java android xml


【解决方案1】:

请看下文,

Android Broadcast receiver not executed on application close

我还认为您可能想了解如何设置优先级。请阅读以下内容,

AndroidManifestIntentFilter_priority

int AndroidManifestIntentFilter_priority 指定相对 处理特定意图的重要性或能力。对于接收者, 这控制它们执行的顺序以接收 广播(注意,对于异步广播,这个顺序是 忽略)。对于活动,这提供了有关活动有多好的信息 活动正在处理一个意图;当多个活动匹配一个 意图和有不同的优先级,只有那些具有更高的优先级 优先级值将被视为匹配。

仅在您确实需要强制执行某些特定顺序时才使用 收到广播,或想强行放置一个活动 总是比别人更受欢迎。该值是一个整数,与 数字越大越好。

必须是整数值,例如“100”。

这也可能是对资源的引用(形式为 “@[package:]type:name”)或主题属性(形式为 "?[package:][type:]name") 包含此类型的值。

这对应于全局属性资源符号优先级。

常数值:2 (0x00000002)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多