Android 收到短信后自动发送

Posted

技术标签:

【中文标题】Android 收到短信后自动发送【英文标题】:Android Send SMS automatically when it is received 【发布时间】:2015-05-23 17:58:34 【问题描述】:

我正在开发一个应用程序,当您之前收到一条短信时,它会向网站发送短信。我的问题是,当我尝试从以前收到的 SMS 中发送几条 SMS...一。有人能帮我吗?谢谢:)

public class GetSMSTask extends AsyncTask<Void, Void, Void> 

private Context mContext;

public GetSMSTask(Context context) 
    mContext = context;


private static final String SMSBROKER = "http://xx.xx.xx.xx:8080/smsbroker/params";


@Override
protected Void doInBackground(Void... arg0) 
    OutcomeSms os=new OutcomeSms();
    String texto = null;
    String msisdn = null;

    HashMap<String, List<String>> hash = new HashMap<String, List<String>>();
    List<String> list = new ArrayList<String>();




    try 
        org.apache.http.client.HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(SMSBROKER);

        HttpResponse response = client.execute(get);
        Log.w("PlaySMSBroker","postSingal Response: " + response.getStatusLine());

        os.sendSMSMessage(msisdn, texto, mContext);

        list.add(texto);
        hash.put(msisdn,list);

        List<String> listOfMessages = hash.get(msisdn);
        int numberOfMessages = listOfMessages.size();

        for (int i=1; i<numberOfMessages; i++)
            os.sendSMSMessage(msisdn, texto, mContext);         
        


     catch (UnsupportedEncodingException e) 
        Log.e("PlaySMSBroker", "UnsupportedEncodingException:" + e.getMessage());
     catch (ClientProtocolException e) 
        Log.e("PlaySMSBroker", "ClientProtocolException:" + e.getMessage());
     catch (IOException e) 
        Log.e("PlaySMSBroker", "IOException:" + e.getMessage());
     catch (Exception e) 
        Log.e("PlaySMSBroker", "Exception" + e.getClass().toString());
    
    return null;

【问题讨论】:

【参考方案1】:

使用 HashMap 替换数字和消息矩阵。

对 hashmap 键使用电话号码,对 hasmap 值使用字符串列表。

HashMap<a, b> matrix = new HashMap<a, b>();

a = 电话号码

b = 已发送消息列表

当您发送短信时,将条目添加到列表中。如果是第一条短信,请放入哈希图中。

要查看您发送了多少条短信,请按号码获取列表并计算列表中有多少项。

例子:

//to insert
HashMap<String, List<String>> hash = new HashMap<String, List<String>>();
List<String> list = new ArrayList<String>();
list.add("message1");
hash.put("993739292",list);

//to get list by telefone number
List<String> listOfMessages = hash.get("993739292");
int numberOfMessages = listOfMessages.size();

【讨论】:

No.. 这总是返回 1。当您发送新消息时,您不能总是创建新列表。您需要重新使用现有的列表和哈希图。 请复制我的代码并解决问题...我不知道该怎么做 这是不可能的。当您将第一条消息发送到数字时,您需要以静态方式创建哈希图。 我无法向您展示更多代码。了解如何在 Java 中创建和使用静态变量,并将此 List 和 HashMap 放入您的主要活动中。然后更改/更新异步任务中的变量。

以上是关于Android 收到短信后自动发送的主要内容,如果未能解决你的问题,请参考以下文章

Android发送短信解决字数限制问题

Android短信收到,语音播报

Android:如果我使用 SmsManager 发送短信,它会自动重新发送失败的短信吗?

如果我使用 Firebase 作为后端,我如何在 android 应用程序的后端发生事件时自动发送推送通知

Android在按钮点击时自动发送短信

android发送短信验证码并自动获取验证码填充文本框