android - 将我收到的短信发送到我的服务器(上传或..)

标签 android

我正在尝试编写一个 android 应用程序,第二个短信到达我的手机,它上传或发送到我在互联网上的服务器,我写了获取新的短信号码和正文部分,但现在我不知道应该它将 senderNum 和 Message 写入文件并上传,或者可以将其直接发送到我的互联网服务器,知道吗?请用示例代码告诉我。谢谢..

public class IncomingSms extends BroadcastReceiver {

    // Get the object of SmsManager
    final SmsManager sms = SmsManager.getDefault();
    private void sendSMS(String phoneNumber, String message)
    {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, null, null);
    }

    public void onReceive(Context context, Intent intent) {
        // Retrieves a map of extended data from the intent.
        final Bundle bundle = intent.getExtras();

        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 message = currentMessage.getDisplayMessageBody();
                    String sindrome = senderNum  + message;

                    Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message);
                    sendSMS("15555215554", sindrome);
                } // end for loop
            } // bundle is null

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" +e);
        }
    }

    private byte[] getBytes() {
        // TODO Auto-generated method stub
        return null;
    }

    private OutputStream openFileOutput(String string, int modePrivate) {
        // TODO Auto-generated method stub
        return null;
    }
}

最佳答案

这是一个想法,您可以使用 MySQL 数据库和 PHP 文件。

PHP 文件将关心在数据库中保存短信,它可能类似于

<?php
// You should consider the idea to put everything in POST request and add "key" values to avoid someone to
// send to your server 1000 sms from the web with just a page reload

$from = $_GET['from'];
$body = $_GET['body'];

if (!is_numeric($from))
{
    // Invalid input
    // Do nothing
    exit();
}

// connect to the MYSQL server
$mysqli = new MySQLi(...);

/*
 * DB:
 * PHONE NUMBER | BODY
 * X            | X
 *
 * You can anyway add more info like sending time etc.
 */

// run the query insert
if ($stmt = $mysqli->prepare("INSERT INTO sms (number, body) VALUES (?, ?)"))
{
    $stmt->bind_param("is", $from, $body);
    $stmt->execute();
    $stmt->close();
}
// now you have in your database the sms

// close mysqli connection
$mysqli->close();


?>

然后您可以使用 AsyncTask 或 Handler 来运行来自 Android 应用程序的请求。

好吧,也许我错过了关闭某些资源之类的东西......但一切都应该没问题。

// As number i think SenderNumber is the number of who send the SMS
// message is here the message is saved
Handler handler = new Handler();
handler.post(new Runnable() {
    @Override
    public void run() {
        // OK
        // Here you have senderNum and message

        HttpClient httpClient = new DefaultHttpClient();
        // Since it's  a GET reuqest you can pass params directly
        // but as i said, a POST could be more better
        HttpGet httpGet = new HttpGet("YOUR_URL_HERE?number=" + number + "&body=" + message);
        String responseBody;
        HttpResponse response;

        try
        {
            // We run the request
            response = httpClient.execute(httpGet);

            // now i need to know if everything is ok
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();

            // OK!
            if (statusCode == 200)
            {
                responseBody = EntityUtils.toString(response.getEntity());
                // Now in responseBody you have the response of the request
                // If you don't need it, remove it
            }

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});

它应该可以帮助您理解如何编写代码。

关于android - 将我收到的短信发送到我的服务器(上传或..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355354/

相关文章:

javascript - Android WebView 和 HTML5 Canvas

java - 使用 Google Maps Android - 读取 CSV 文件问题

Android 在 ORMLite 中使用 OrderBy

android - zxing扫描区域不准确

android - 亚行没有回应。如果您想重试,请手动杀死 "adb.exe"并单击 'Restart'

android - PagerTabStrip - 在屏幕上显示所有选项卡,就像正常的操作栏选项卡实现一样?

java android编程..从用户获取ip地址

android - 有新版本可用时强制更新 Android 应用程序

java - 获取Android Spinner ID

android - 如何在android中获取当前 Activity 名称和上一个 Activity ?