0

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

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

  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

4 回答 4

1

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

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
于 2012-05-24T21:25:38.980 回答
1

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

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
于 2012-05-24T21:27:27.653 回答
1

你正在传递msisdnuri.parse. 这是一个编辑文本!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);
于 2012-05-24T21:37:00.203 回答
1

在这一行...

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

应该是time.getText().toString()。您还需要使用getText().toString()电话号码 - 不仅仅是getText()(在 an 上EditText)返回 anEditable而不是 a String

但是,我不确定findViewById(...)与 a 一起使用Runnable是否合法,尽管我可能是错的。

于 2012-05-24T22:08:22.630 回答