2015-03-13 3 views
-3

Здесь я создал предупреждение DialogActivity, где построил «setPositiveButton», запустил простой диалог и попытался отправить сообщение sms для телефонии android для получателя.Почему android.telephony.SmsManager не может отправлять сообщения из диалогового окна?

Но таинственно диалоговое окно не может отправлять sms получателю. Не могли бы вы помочь мне понять причину?

Вот код:

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() { 

I я не могу понять, почему?

+0

Можете ли вы разместить исключение? LogCat? –

+0

@Boban S: Я повторно отредактировал с помощью оператора исключения, зафиксированного logcat. – gauravsheohar

+0

Логарифм, который вы опубликовали, не связан с кодом для отправки SMS. У вас есть ошибки в logcat? –

ответ

0

Ура! Проблема решена.

Не было подходящей инманции поля номера телефона метода 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; 
     } 
    } 

} 
0

Вы не получаете текст из поля с номерами.

Заменить строку

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

с этим

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

S: Но я сделал то же, что и вы, перед использованием в mSmsManager.sendTextMessage(). Является ли настоящая проблема не подходящим экземпляром «editTextEnterMobileNum». Спасибо, что указали на проблему. Я бы отредактировал с правильным кодом, чтобы помочь другим. – gauravsheohar