为什么android.telephony.SmsManager无法从Dialog Activity发送消息?

时间:2015-03-13 11:57:25

标签: android

这里我创建了一个警报DialogActivity,其中“setPositiveButton”构建器,启动一个简单的对话框,并尝试向收件人发送android电话短信。

但神秘的是,对话框无法向收件人发送短信。你能帮我理解一下原因吗?

以下是代码:

package com.example.demo;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class DialogActivity extends Activity 
{   
    private Dialog mDialog;
    String editTextEnterMobileNum;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder
        .setTitle("Incoming Server Message")
        .setMessage("text")
        .setCancelable(false)
        .setPositiveButton("eReceipt?", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                dialog.cancel();

                mDialog = new Dialog(DialogActivity.this);
                mDialog.setContentView(R.layout.ereceipt_dialog);                       
                mDialog.setTitle("User Input");
                editTextEnterMobileNum = ((EditText) mDialog.findViewById(R.id.eReceiptEditText)).getText().toString();
                mDialog.findViewById(R.id.eReceiptOkButton).setOnClickListener(
                        new OnClickListener() {

                            @Override
                            public void onClick(View v) {
                                dismissDialog();
                                try{
                                    android.telephony.SmsManager mSmsManager = android.telephony.SmsManager.getDefault();
                    mSmsManager.sendTextMessage(editTextEnterMobileNum, null, SmsReceiver.msgContent, null, null);
                                    Toast.makeText(getApplicationContext(), "Your SMS has sent successfully!", Toast.LENGTH_LONG).show();

                                }

                                   catch(Exception e){
                                        Toast.makeText(getApplicationContext(), "Your SMS sent has failed!", Toast.LENGTH_LONG).show();
                                        e.printStackTrace();
                                   }                        

                            }
                        });

                mDialog.show();              
          }
        })
        .setNegativeButton("Exit", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                dialog.cancel();

            }
        });
        AlertDialog alert = builder.create();
        alert.show();
        //finish();
    }

    public void dismissDialog() {
        if (mDialog != null) {
            mDialog.dismiss();
            mDialog = null;
        }
    }

}

Logcat输出是:

03-13 18:09:58.139: E/ViewRootImpl(21086): sendUserActionEvent() mView == null
03-13 18:10:13.999: W/System.err(21086): java.lang.IllegalArgumentException: Invalid destinationAddress
03-13 18:10:14.009: W/System.err(21086):    at android.telephony.SmsManager.sendTextMessage(SmsManager.java:120)
03-13 18:10:14.009: W/System.err(21086):    at com.watchdata.qposdemo.DialogActivity$1$1.onClick(DialogActivity.java:66)
03-13 18:10:14.009: W/System.err(21086):    at android.view.View.performClick(View.java:4475)
03-13 18:10:14.009: W/System.err(21086):    at android.view.View$PerformClick.run(View.java:18786)
03-13 18:10:14.009: W/System.err(21086):    at android.os.Handler.handleCallback(Handler.java:730)
03-13 18:10:14.009: W/System.err(21086):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-13 18:10:14.009: W/System.err(21086):    at android.os.Looper.loop(Looper.java:176)
03-13 18:10:14.009: W/System.err(21086):    at android.app.ActivityThread.main(ActivityThread.java:5419)
03-13 18:10:14.009: W/System.err(21086):    at java.lang.reflect.Method.invokeNative(Native Method)
03-13 18:10:14.009: W/System.err(21086):    at java.lang.reflect.Method.invoke(Method.java:525)
03-13 18:10:14.009: W/System.err(21086):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
03-13 18:10:14.009: W/System.err(21086):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
03-13 18:10:14.009: W/System.err(21086):    at dalvik.system.NativeStart.main(Native Method)
03-13 18:10:14.629: E/ViewRootImpl(21086): sendUserActionEvent() mView == null
03-13 18:10:14.724: D/AbsListView(21086): onVisibilityChanged() is called, visibility : 8
03-13 18:10:14.724: D/AbsListView(21086): unregisterIRListener() is called 
03-13 18:10:14.729: D/AbsListView(21086): Get MotionRecognitionManager
03-13 18:10:14.744: D/AbsListView(21086): onVisibilityChanged() is called, visibility : 4
03-13 18:10:14.744: D/AbsListView(21086): unregisterIRListener() is called 
03-13 18:10:14.749: D/AbsListView(21086): onVisibilityChanged() is called, visibility : 0
03-13 18:10:14.749: D/AbsListView(21086): unregisterIRListener() is called 
03-13 18:10:14.854: D/AbsListView(21086): unregisterIRListener() is called 

在调试期间,执行无法进入

的OnClickListener()
mDialog.findViewById(R.id.eReceiptOkButton).setOnClickListener(
                        new OnClickListener() {

我无法找出原因?

2 个答案:

答案 0 :(得分:1)

干杯!问题得到解决。

mSmsManager.sendTextMessage()方法的电话号码字段没有适当的实例化。唉!我犯了多么愚蠢的错误,花了一些时间才弄明白。我相信我因为onClickListener()方法的嵌套而误导。他他......

我正在重新发布正确的代码,以便为其他人提供帮助。

public class DialogActivity extends Activity 
{   
    private Dialog mDialog;
    String editTextEnterMobileNum;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder
        .setTitle("Incoming Server Message")
        .setMessage("text")
        .setCancelable(false)
        .setPositiveButton("eReceipt?", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                dialog.cancel();

                mDialog = new Dialog(DialogActivity.this);
                mDialog.setContentView(R.layout.ereceipt_dialog);                       
                mDialog.setTitle("User Input");
                final EditText phoneNo = (EditText) mDialog.findViewById(R.id.eReceiptEditText);
                mDialog.findViewById(R.id.eReceiptOkButton).setOnClickListener(
                        new OnClickListener() {

                            @Override
                            public void onClick(View v) {
                                dismissDialog();
                                String number = phoneNo.getText().toString();
                                try{
                                    android.telephony.SmsManager mSmsManager = android.telephony.SmsManager.getDefault();
                    mSmsManager.sendTextMessage(number, null, SmsReceiver.msgContent, null, null);
                                    Toast.makeText(getApplicationContext(), "Your SMS has sent successfully!", Toast.LENGTH_LONG).show();

                                }

                                   catch(Exception e){
                                        Toast.makeText(getApplicationContext(), "Your SMS sent has failed!", Toast.LENGTH_LONG).show();
                                        e.printStackTrace();
                                   }                        

                            }
                        });

                mDialog.show();              
          }
        })
        .setNegativeButton("Exit", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                dialog.cancel();

            }
        });
        AlertDialog alert = builder.create();
        alert.show();
        //finish();
    }

    public void dismissDialog() {
        if (mDialog != null) {
            mDialog.dismiss();
            mDialog = null;
        }
    }

}

答案 1 :(得分:0)

您没有从号码字段中获取文字。

替换行

mSmsManager.sendTextMessage(editTextEnterMobileNum, null, SmsReceiver.msgContent, null, null);

这一个

mSmsManager.sendTextMessage(editTextEnterMobileNum.getText().toString(), null, SmsReceiver.msgContent, null, null);