我想创建一个应用程序,当使用brodcast接收器接收或发送短信时发出通知。如何做到这一点?谢谢。
答案 0 :(得分:1)
试试这个 public class smsActivity扩展了BroadcastReceiver {
protected static final String TAG = "PlayingAudio";
@Override
public void onReceive(Context context, Intent intent)
{
this.mContext = context;
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
incomingnum=msgs[i].getOriginatingAddress();
MsgBody=msgs[i].getMessageBody().toString();
//str += "SMS from " +incomingnum;
//str += " :";
str += MsgBody;
// str += "\n";
System.out.println("Str is "+str);
}
Notification notification = new Notification(android.R.drawable.ic_popup_reminder,
"My Notification", System.currentTimeMillis());
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;*/
}
}
}
}
答案 1 :(得分:1)
在运行API 7映像的模拟器中测试。
接收者类:
package add.yourpackage.here;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
StringBuilder smsSummary = new StringBuilder("SMS received from: ");
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
final String sender = msgs[i].getOriginatingAddress();
final String message = msgs[i].getMessageBody().toString();
smsSummary.append(sender);
smsSummary.append("; ").append(message).append("\n");
Log.d("SMS_RECEIVER", "Str is " + smsSummary);
}
NotificationManager notifManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = new Notification(
android.R.drawable.ic_popup_reminder, smsSummary,
System.currentTimeMillis());
notif.defaults |= Notification.DEFAULT_SOUND;
notif.defaults |= Notification.DEFAULT_VIBRATE;
notif.defaults |= Notification.DEFAULT_LIGHTS;
// The notification will be canceled when clicked by the user...
notif.flags |= Notification.FLAG_AUTO_CANCEL;
// ...but we still need to provide and intent; an empty one will
// suffice. Alter for your own app's requirement.
Intent notificationIntent = new Intent();
PendingIntent pi = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
notif.setLatestEventInfo(context, "SMS Notification",
"Another txt for you", pi);
notifManager.notify(0, notif);
}
}
}
如果您运行的是API 11+,则可以使用Notification.Builder代替,但我的手机仍然使用Gingerbread。
接收器的清单条目。您的应用仍然需要定义接收短信的权限,但我认为您已经这样做了:
<receiver
android:name=".service.SmsReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
</intent-filter>
</receiver>