[android篇]android 4.4 短信适配
来源:互联网 发布:手机免费下载电影软件 编辑:程序博客网 时间:2024/06/02 05:39
andorid 4.4(KITKAT)对系统很多方面做了改动,在目前的项目中,对短信有直接的影响。我们看一下下面这段文档说明:
Advice for SMS backup & restore apps
Because the ability to write to the SMSProvider is restricted to the app the user selects as the default SMS app, anyexisting app designed purely to backup and restore SMS messages will currentlybe unable to restore SMS messages on Android 4.4. An app that backs up andrestores SMS messages must also be set as the default SMS app so that it canwrite messages in the SMS Provider.
因此,我们需要对4.4做相应的适配
- In a broadcast receiver, include an intent filter for
SMS_DELIVER_ACTION
("android.provider.Telephony.SMS_DELIVER"
). The broadcast receiver must also require the BROADCAST_SMS permission.This allows your app to directly receive incoming SMS messages.
public class SmsReceiver extends BroadcastReceiver {@Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); if (extras == null) { return; } Object[] smsExtras = (Object[]) extras.get("pdus"); if (smsExtras == null || smsExtras.length == 0) { return; } ContentResolver contentResolver = context.getContentResolver(); for (Object smsExtra : smsExtras) {try {byte[] smsBytes = (byte[]) smsExtra;SmsMessage smsMessage = SmsMessage.createFromPdu(smsBytes);ContentValues values = new ContentValues();values.put(Sms.ADDRESS, smsMessage.getOriginatingAddress());values.put(Sms.BODY, smsMessage.getMessageBody());values.put(Sms.DATE, smsMessage.getTimestampMillis());values.put(Sms.READ, 0);values.put(Sms.TYPE, Sms.MESSAGE_TYPE_INBOX);contentResolver.insert(Uri.parse("content://sms"), values);} catch (Exception e) {e.printStackTrace();}} }}
- In a broadcast receiver, include an intent filter for
WAP_PUSH_DELIVER_ACTION
("android.provider.Telephony.WAP_PUSH_DELIVER"
) with the MIME type"application/vnd.wap.mms-message"
. The broadcast receiver must also require theBROADCAST_WAP_PUSH
permission.This allows your app to directly receive incoming MMS messages.
public class MmsReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO}}MMS日常生活中用的不多,没有做相应的处理
- In your activity that delivers new messages, include an intent filter for
ACTION_SENDTO
("android.intent.action.SENDTO"
) with schemas,sms:
,smsto:
,mms:
, andmmsto:
.This allows your app to receive intents from other apps that want to deliver a message.
public class ComposeSmsActivity extends Activity {}
- In a service, include an intent filter for
ACTION_RESPONSE_VIA_MESSAGE
("android.intent.action.RESPOND_VIA_MESSAGE"
) with schemas,sms:
,smsto:
,mms:
, andmmsto:
. This service must also require theSEND_RESPOND_VIA_MESSAGE
permission.This allows users to respond to incoming phone calls with an immediate text message using your app.
public class HeadlessSmsSendService extends IntentService {public HeadlessSmsSendService() { super(HeadlessSmsSendService.class.getName()); setIntentRedelivery(true); } @Override protected void onHandleIntent(Intent intent) { String action = intent.getAction(); if (!TelephonyManager.ACTION_RESPOND_VIA_MESSAGE.equals(action)) { return; } Bundle extras = intent.getExtras(); if (extras == null) { return; } String message = extras.getString(Intent.EXTRA_TEXT); Uri intentUri = intent.getData(); String recipients = getRecipients(intentUri); if (TextUtils.isEmpty(recipients)) { return; } if (TextUtils.isEmpty(message)) { return; } String[] destinations = TextUtils.split(recipients, ";"); sendAndStoreTextMessage(getContentResolver(), destinations, message); } /** * get quick response recipients from URI */ private String getRecipients(Uri uri) { String base = uri.getSchemeSpecificPart(); int pos = base.indexOf('?'); return (pos == -1) ? base : base.substring(0, pos); } /** * Send text message to recipients and store the message to SMS Content Provider * * @param contentResolver ContentResolver * @param destinations recipients of message * @param message message */ private void sendAndStoreTextMessage(ContentResolver contentResolver, String[] destinations, String message) { SmsManager smsManager = SmsManager.getDefault(); for (String destination : destinations) { try{ smsManager.sendTextMessage(destination, null, message, null, null); ContentValues values = new ContentValues(); values.put(Sms.ADDRESS, destination); values.put(Sms.BODY, message);values.put(Sms.DATE, System.currentTimeMillis());values.put(Sms.READ, 0);values.put(Sms.TYPE, Sms.MESSAGE_TYPE_SENT); contentResolver.insert(Uri.parse("content://sms"), values); }catch(Exception e){ e.printStackTrace(); } } }}
AndroidMenifest.xml:
<!-- Activity that allows the user to send new SMS/MMS messages --> <activity android:name="packageName.activity.ComposeSmsActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </activity> <!-- BroadcastReceiver that listens for incoming SMS messages --> <receiver android:name="packageName.receiver.SmsReceiver" android:permission="android.permission.BROADCAST_SMS"> <intent-filter> <action android:name="android.provider.Telephony.SMS_DELIVER" /> </intent-filter> </receiver> <!-- BroadcastReceiver that listens for incoming MMS messages --> <receiver android:name="packageName.receiver.MmsReceiver" android:permission="android.permission.BROADCAST_WAP_PUSH"> <intent-filter> <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" /> <data android:mimeType="application/vnd.wap.mms-message" /> </intent-filter> </receiver> <!-- Service that delivers messages from the phone "quick response" --> <service android:name="packageName.service.HeadlessSmsSendService" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" android:exported="true" > <intent-filter> <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </service>
另:<Manifest />里面别忘了加android:label=“@string/app_name”
英文文档请移步:http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
- [android篇]android 4.4 短信适配
- android 4.4删除短信
- android 4.4删除短信
- [android篇]短信 数据结构
- android 短信
- android短信
- Android 短信
- Android短信
- android 4.4 + 默认短信概念
- [android篇]短信数据结构摘要
- Android短信窃听器短信拦截
- Android拦截短信,接收短信
- android 4.4 设置默认短信 和来电短信拒接
- android 4.4 设置默认短信 和来电短信拒接
- android 4.4 设置默认短信 和来电短信拒接
- android 4.4 设置默认短信 和来电短信拒接
- 关于android 4.4短信(sms)接收流程-状态机篇
- Android短信拦截机制适配的坑(上)--4.4以下系统
- FregClient进程,创建一个BpFregService类型的代理对象
- iOS CoreBluetooth 教程
- WebService之使用xml文件生成客户端代码
- 排名优化:外链有它的益处 更有他的不佳处
- 用popen遭遇ENOMEM (Cannot allocate memory)的问题
- [android篇]android 4.4 短信适配
- 根据DEM生成连续曲面栅格(提取DEM的经纬度)
- highcharts 应用总结
- 圆弧形ListView(CircleList)
- Linux系统环境下关于多进程并发写同一个文件的讨论
- java通过实体类生成dao文件
- 一个CCSprite所需要耗费内存分析
- Qt之文件操作 QFile
- 一夜之间站点从不到1千IP涨到6万IP的开发