这是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。我想显示应用程序是打开还是关闭的通知。
答案 0 :(得分:0)
请参阅以下内容,
Android Broadcast receiver not executed on application close
我还认为您可能想要了解如何设置优先级。请阅读以下内容,
<强> AndroidManifestIntentFilter_priority 强>
int AndroidManifestIntentFilter_priority指定相对值 处理特定意图的重要性或能力。对于接收器, 这可以控制执行它们的顺序 广播(请注意,对于异步广播,此顺序为 忽略)。对于活动,这提供了有关如何好的信息 活动正在处理意图;当多个活动匹配时 意图和不同的优先级,只有那些更高的 优先级值将被视为匹配。
只有在你真的需要强加一些特定的顺序时才使用 收到广播,或者想强行开展活动 永远比别人更受欢迎。该值是一个整数,带有 更高的数字被认为更好。
必须是整数值,例如“100”。
这也可能是对资源的引用(在表单中) “@ [package:] type:name”)或主题属性(在表单中 “?[package:] [type:] name”)包含此类型的值。
这对应于全局属性资源符号优先级。
常数值:2(0x00000002)