Как сохранить SMS на почтовый ящик в Android?

голоса
38

Я написал следующий код для отправки SMS-сообщений.

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);

Но это не обновляется в моей папке Входящие, мне нужно сохранить то же сообщение в папке Входящие, или есть ли способ для вызова собственного приложения SMS для отправки SMS?

Задан 13/03/2009 в 11:20
источник пользователем
На других языках...                            


5 ответов

голоса
58

Вы можете использовать контент-провайдер смс читать и писать смс сообщение:

ContentValues values = new ContentValues();
values.put("address", "123456789");
values.put("body", "foo bar");
getContentResolver().insert(Uri.parse("content://sms/sent"), values);

Я не знаю , почему вы хотите , чтобы написать сообщение отправить на почтовый ящик , но если это то , что вы хотите просто изменить выше URI для"content://sms/inbox" .

В качестве альтернативы можно передать в приложение обмена сообщениями, начав деятельность с намерением примерно следующее:

Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms://"));
sendIntent.putExtra("address", "123456789");
sendIntent.putExtra("sms_body", "foo bar");
startActivity(sendIntent);

Edit: Тем не менее, sms://контент - провайдер не является частью SDK , поэтому я настоятельно рекомендую не используя код , как это в публичных заявлениях по нескольким причинам .

Ответил 16/05/2009 в 11:19
источник пользователем

голоса
27

Если вы хотите, чтобы вручную поставить некоторые SMS на Ваш почтовый ящик с именем отправителя, то,

  ContentValues values = new ContentValues();
  values.put("address", "+923359110795");//sender name
  values.put("body", "this is my text");
  getContentResolver().insert(Uri.parse("content://sms/inbox"), values);

также добавить их в манифесте.

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

Теперь этот код добавит смс в почтовый ящик с определенным именем отправителя, так что вы можете легко справиться с проблемой вам с этим решением,

Ответил 07/12/2012 в 07:36
источник пользователем

голоса
6

Этот код будет работать для всех Android версии, включая выше KitKat (19)

public boolean saveSms(String phoneNumber, String message, String readState, String time, String folderName) {
        boolean ret = false;
        try {
            ContentValues values = new ContentValues();
            values.put("address", phoneNumber);
            values.put("body", message);
            values.put("read", readState); //"0" for have not read sms and "1" for have read sms
            values.put("date", time);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                Uri uri = Telephony.Sms.Sent.CONTENT_URI;
                if(folderName.equals("inbox")){
                    uri = Telephony.Sms.Inbox.CONTENT_URI;
                }
                mActivity.getContentResolver().insert(uri, values);
            }
            else {
                mActivity.getContentResolver().insert(Uri.parse("content://sms/" + folderName), values);
            }

            ret = true;
        } catch (Exception ex) {
            ex.printStackTrace();
            ret = false;
        }
        return ret;
    }

Как звонить

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        final String myPackageName = getPackageName();
        if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {

            Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
            intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName);
            startActivityForResult(intent, 1);
        }else {
            saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
        }
    }else {
        saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
    }

onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                final String myPackageName = getPackageName();
                if (Telephony.Sms.getDefaultSmsPackage(mActivity).equals(myPackageName)) {

                    //Write to the default sms app
                    saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
                }
            }
        }
    }
}

Для получения более подробной или образец приложения последующей ссылки: http://wisdomitsol.com/blog/android/sms/how-to-programmatically-save-sms-to-inbox-or-sent-in-android

Ответил 18/12/2012 в 17:05
источник пользователем

голоса
0
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", "Content of the SMS goes here...");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

вызвать собственное приложение SMS с содержанием

Ответил 28/01/2010 в 07:22
источник пользователем

голоса
-1
ContentValues values = new ContentValues();
values.put("address", phoneNumber);
values.put("body", multimessage);
values.put("read", 1); //"0" for have not read sms and "1" for have read sms
Uri uri = Telephony.Sms.Sent.CONTENT_URI;
Activity ctx = this.cordova.getActivity();
ctx.getContentResolver().insert(uri, values);
Ответил 04/06/2017 в 18:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more