打算发送短信,不仅打开短信创建

时间:2011-08-12 14:53:08

标签: android button sms android-intent widget

我有一个带小部件的应用。小部件上的三个按钮应该将预定义的SMS消息发送到预定义的数字......这是我的代码:

package cro.perger.bonbon;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;



        public class HelloWidget extends AppWidgetProvider {

                @Override
                public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                        int[] appWidgetIds) {

                            String encodedHash = Uri.encode("#");

                            for (int appWidgetId : appWidgetIds) {

                                Intent callIntent1  = new Intent("android.intent.action.CALL",
                                         Uri.parse("tel:*100" + encodedHash));
                                Intent callIntent2  = new Intent("android.intent.action.CALL",
                                         Uri.parse("tel:*200*1" + encodedHash));

                                Intent sendIntent1 = new Intent(Intent.ACTION_VIEW);
                                sendIntent1.putExtra("sms_body", "Poruka 1");
                                sendIntent1.putExtra("address", "5556");
                                sendIntent1.setType("vnd.android-dir/mms-sms");

                                Intent sendIntent2 = new Intent(Intent.ACTION_VIEW);
                                sendIntent2.putExtra("sms_body", "Poruka 2");
                                sendIntent2.putExtra("address", "5556");
                                sendIntent2.setType("vnd.android-dir/mms-sms");

                                Intent sendIntent3 = new Intent(Intent.ACTION_VIEW);
                                sendIntent3.putExtra("sms_body", "Poruka 3");
                                sendIntent3.putExtra("address", "5556");
                                sendIntent3.setType("vnd.android-dir/mms-sms");

                                Intent openintent = new Intent(context, bonbon.class);

                                PendingIntent pendingIntent1 = PendingIntent.getActivity(context, 0, callIntent1, 0);
                                PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 0, callIntent2, 0);
                                PendingIntent pendingIntent3 = PendingIntent.getActivity(context, 0, sendIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
                                PendingIntent pendingIntent4 = PendingIntent.getActivity(context, 0, sendIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
                                PendingIntent pendingIntent5 = PendingIntent.getActivity(context, 0, sendIntent3, PendingIntent.FLAG_UPDATE_CURRENT);
                                PendingIntent pendingIntent6 = PendingIntent.getActivity(context, 0, openintent, 0);

                                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
                                views.setOnClickPendingIntent(R.id.button1, pendingIntent1);
                                views.setOnClickPendingIntent(R.id.button2, pendingIntent2);
                                views.setOnClickPendingIntent(R.id.button3, pendingIntent3);
                                views.setOnClickPendingIntent(R.id.button4, pendingIntent4);
                                views.setOnClickPendingIntent(R.id.button5, pendingIntent5);
                                views.setOnClickPendingIntent(R.id.button6, pendingIntent6);

                                appWidgetManager.updateAppWidget(appWidgetId, views);

                            }

                }

        }

问题是button3,button4和button5(当我点击它们时)不发送短信,但只打开新的短信屏幕,我需要点击发送短信。我需要更改什么,SMS自动发送给收件人?

3 个答案:

答案 0 :(得分:1)

刚从应用程序中删除了一些旧代码,这应该适用于发送短信:

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.telephony.gsm.SmsManager;
import android.util.Log;

 send_text_message (Number, "This is a message"); 

private void send_text_message (String phoneNumber, String message) 
{
 if (phoneNumber.length() > 0 && message.length() > 0)
 {
  Log.i (TAG, "MyPhoneStateListener: onCallStateChanged(); test text sent to " + phoneNumber);    
  sendSMS(phoneNumber, message);      
 }
 else
 {
  Log.i (TAG, "MyPhoneStateListener: onCallStateChanged(); test text was NOT sent to " + phoneNumber);                   
 }
}   

private void sendSMS(String phoneNumber, String message)
{                     
 SmsManager sms = SmsManager.getDefault();
 sms.sendTextMessage(phoneNumber, null, message, null, null);        
}

答案 1 :(得分:0)

如果您要发送短信,请查看官方文档中的SmsManagersendTextMessage()http://developer.android.com/reference/android/telephony/SmsManager.html

答案 2 :(得分:0)

使用SmsManager和方法sendTextMessage()

import android.app.Activity;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class EnvoieSms extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //On récupère le bouton créer en XML grâce à son id
    Button btnEnvoie = (Button)findViewById(R.id.envoyer);
    //On récupère les deux EditText correspondant aux champs pour entrer le numéro et le message
    final EditText numero =(EditText)findViewById(R.id.numero);
    final EditText message = (EditText)findViewById(R.id.message);
    //On affecte un écouteur d'évènement au bouton
    btnEnvoie.setOnClickListener(new OnClickListener() {

        @SuppressWarnings("deprecation")
        public void onClick(View v) {
            //On récupère ce qui a été entré dans les EditText
            String num = numero.getText().toString();
            String msg = message.getText().toString();
            //Si le numéro est supérieur à 4 charactère et que le message n'est pas vide on lance la procédure d'envoi
            if(num.length()>= 4 && msg.length() > 0){
                //Grâce à l'objet de gestion de SMS (SmsManager) que l'on récupère grâce à la méthode static getDefault()
                //On envoit le SMS à l'aide de la méthode sendTextMessage
                SmsManager.getDefault().sendTextMessage(num, null, msg, null, null);
                //On efface les deux EditText
                numero.setText("");
                message.setText("");
            }else{
                //On affiche un petit message d'erreur dans un Toast
                Toast.makeText(EnvoieSms.this, "Enter le numero et/ou le message", Toast.LENGTH_SHORT).show();
            }

        }
    });
}

}