当前位置: 首页 > 知识库问答 >
问题:

Sms不在Kitkat 4.4上保存

吴才俊
2023-03-14
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="21" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/icon_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".SmsActivity"
        android:label="@string/app_name"
        android:uiOptions="splitActionBarWhenNarrow" >
        <meta-data
            android:name="android.support.UI_OPTIONS"
            android:value="splitActionBarWhenNarrow" />

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".NewSmsBroadcastReceiver"
        android:permission="android.permission.BROADCAST_SMS" >
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_DELIVER" />
        </intent-filter>
    </receiver>
    <receiver android:name=".SmsBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"  />
        </intent-filter>
    </receiver>
    <receiver
        android:name=".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>

    <activity android:name=".SendActivity" >
        <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>

    <service
        android:name=".HeadlessSmsSendService"
        android:exported="true"
        android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" >
        <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>

    <activity
        android:name=".SendActivity"
        android:label="@string/app_name"
        android:parentActivityName=".SmsActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.wyrmise.melriss.SmsActivity" />
    </activity>
    <activity
        android:name=".ThreadActivity"
        android:label="@string/title_activity_thread" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.wyrmise.melriss.SmsActivity" />
    </activity>
</application>

</manifest>
public class SmsBroadcastReceiver extends BroadcastReceiver {

public static final String SMS_BUNDLE = "pdus";

public void onReceive(Context context, Intent intent) {
    Bundle intentExtras = intent.getExtras();
    if (intentExtras != null) {
        Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
        String address  = "";
        String smsBody = "";

        for (int i = 0; i < sms.length; ++i) {
            SmsMessage smsMessage = SmsMessage
                    .createFromPdu((byte[]) sms[i]);
            smsBody = smsMessage.getMessageBody().toString();
            address = smsMessage.getOriginatingAddress();
        }

        Message msg = new Message();
        msg.messageNumber=address;
        msg.messageContent=smsBody;
        SimpleDateFormat hours = new SimpleDateFormat("h:mm a",
                Locale.US);
        msg.messageDate=hours.format(new Date());

        SmsActivity inst = SmsActivity.instance();
        inst.pushNotification(msg);
        inst.updateList(msg);
    }
}
}

共有1个答案

壤驷高洁
2023-03-14

即使您已经设置了接收器来获取系统广播,您仍然需要存储从它们中检索的消息;例如:

ContentValues values = new ContentValues();
values.put(Telephony.Sms.Inbox.ADDRESS, smsMessage.getDisplayOriginatingAddress());
values.put(Telephony.Sms.Inbox.BODY, smsBody);
values.put(Telephony.Sms.Inbox.DATE, System.currentTimeMillis());
values.put(Telephony.Sms.Inbox.PROTOCOL, smsMessage.getProtocolIdentifier());
values.put(Telephony.Sms.Inbox.READ, 0);
values.put(Telephony.Sms.Inbox.SEEN, 0);
values.put(Telephony.Sms.Inbox.SERVICE_CENTER, smsMessage.getServiceCenterAddress());
values.put(Telephony.Sms.THREAD_ID, Telephony.Threads.getOrCreateThreadId(context, address));

Uri insertUri = context.getContentResolver().insert(Telephony.Sms.Inbox.CONTENT_URI, values);

从KitKat开始,默认的SMS应用程序负责将所有传入的消息写入提供程序,因此,当应用程序是这些版本的默认应用程序时,您肯定需要保存sms_deliver广播中的消息。

在KitKat之前,没有默认的短信应用程序,所以用户必须确保至少有一个消息应用程序,通常是预装的,可以自动保存消息,但这是一种免费的应用程序。如果您支持这些版本,您可能也需要处理在那里插入消息,如果没有其他应用程序做这件事。

 类似资料:
  • 我打算在亚马逊SNS上发布公司收入的短信, 当我试图发送一个带有dolar符号$inside正文的消息时,它只是不会发送消息或简单地从消息中删除符号。 这个问题的唯一解决方法是在dolar符号之前设置一个(*)或(`)字符,就像linux bash中的scaping一样... 为什么会出现这种情况?已经有人经历过这个问题了?

  • 当我的应用程序安装在我的相对较新的运行奥利奥8.0的华为上时,我的应用程序能够顺利地启动和运行。该应用程序在运行Lollipop的Nexus模拟器上也运行良好。然而,在我的另一部运行KitKat4.4的手机上,应用程序在启动时就崩溃了。 我认为问题是在添加默认NavigationDrawerActivity时发生的。 java.lang.RuntimeException:无法启动activity

  • 用户发送电子邮件到[goupname]@mydomain.com,主题为'*text'。 邮箱侦听器在服务器上拾取它,在组中查找所有成员并检索他们的电话号码。 服务器使用组中的每个人的电话号码向他们发送Twilio SMS消息。 该组中的任何人如果通过SMS回复该消息,就会发送到整个组。 此时我希望我的听众离开画面。从这里开始,它只是一个纯粹的群发短信,电话对电话。 所有这些对我来说都很容易,除了

  • 短信平台 短信模块已经内置了阿里大于和云之讯两个短信平台,默认启用的是阿里大于,可在后台自行切换。 配置短信平台参数 短信平台在使用前需要在后台「模块 - 短信模块 - 短信模版管理」处添加模版获得模版 ID。详细参数如下, 1.阿里大于(产品已下线,请跳过) 阿里大于需要配置的参数主要有 5 个 type : 普通短信固定为 normal sign : 短信签名,传入的短信签名必须是在阿里大于“

  • sms-integration 是一个基于 SMGP3.4 协议、CMPP 协议的短信发送框架。 特性  支持SMGP3.4协议、CMPP协议 依赖 <dependency> <groupId>cn.chenzw.sms</groupId> <artifactId>sms-core</artifactId> <version>1.0</version></dependency><

  • 本软件可乱发短信——乱发是开玩笑的,发短信的确是真的。可以少量发发短信,用程序玩玩短信网关,把你闲置的低配置Android手机变成短信网关。神马飞信,神马网关,老子一条json就搞定:http://gitcd.com/smsadd.json?to=10086&sender=18181818181&message=奶奶的 比较详细的步骤: 使用你不用的Android手机,安装本软件压缩包:luanf