这里我创建了一个警报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() {
我无法找出原因?
答案 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);