应用程序从任务管理器关闭后,广播接收器无法在棒棒糖中工作

时间:2016-08-17 14:55:45

标签: java android xml

这是Broadcastreceiver。此代码在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。我想显示应用程序是打开还是关闭的通知。

1 个答案:

答案 0 :(得分:0)

请参阅以下内容,

Android Broadcast receiver not executed on application close

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

  

<强> AndroidManifestIntentFilter_priority

     

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

     

只有在你真的需要强加一些特定的顺序时才使用   收到广播,或者想强行开展活动   永远比别人更受欢迎。该值是一个整数,带有   更高的数字被认为更好。

     

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

     

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

     

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

     

常数值:2(0x00000002)