Intent.ACTION_CALL崩溃的应用程序

时间:2012-05-24 21:21:19

标签: android

我已经编写了这个简单的应用程序来根据ms的处理程序延迟进行调用。但是由于某些原因,当我在onClick事件上操作public void callme(View view)按钮时,它会崩溃应用程序。

我确信这很简单,也许有人可以指出我的错误。感谢

  import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.widget.EditText;

    public class CallButtonActivity extends Activity {


        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

          }


     public void callme(View view) {

       EditText edit_seconds = (EditText)findViewById(R.id.seconds);
       CharSequence edit_seconds_value = edit_seconds.getText();

        int mSeconds = Integer.parseInt(edit_seconds_value.toString());   

         Handler myHandler = new Handler();
         myHandler.postDelayed(mMyRunnable, mSeconds);


     }

     private Runnable mMyRunnable = new Runnable()
     {
         public void run()
         {

             EditText msisdn = (EditText)findViewById(R.id.msisdn);

             Intent callIntent = new Intent(Intent.ACTION_CALL);
             callIntent.setData(Uri.parse("tel:" + msisdn));
             startActivity(callIntent);
         }
      };


    }

4 个答案:

答案 0 :(得分:1)

如果没有看到Android清单,我无法肯定地说,但请确保您已将正确的权限添加到AndroidManifest.xml中。具体来说,此标记应添加到应用程序标记上方:

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

答案 1 :(得分:1)

尝试将此必需权限添加到您的清单

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

答案 2 :(得分:1)

您正在将msisdn传递给uri.parse。这是一个EditText!将调用toString方法,但不会将电话号码传递给解析器,而是传递EditText对象的标识符。

当您使用ACTION_CALL时,可能没有进一步的验证,应用程序崩溃了。这应该是有效的:

EditText msisdn = (EditText)findViewById(R.id.msisdn);

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + msisdn.getText()));
startActivity(callIntent);

答案 3 :(得分:1)

在这一行......

int mSeconds = Integer.parseInt(time.toString());

应该是time.getText().toString()。您还需要使用getText().toString()作为电话号码 - 不只是getText(),因为(EditText)会返回Editable而不是String。< / p>

但是,我不确定使用findViewById(...) Runnable是否合法,尽管我可能错了。