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 に適切な権限が追加されていることを確認してください。具体的には、次のタグを application タグの上に追加する必要があります。

<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

あなたは に渡っmsisdnていuri.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()それが( でEditText) ではなく を返すのEditableと同じではありませんString

ただし、間違っているかもしれませんがfindViewById(...)、 a での使用Runnableが合法かどうかはわかりません。

于 2012-05-24T22:08:22.630 に答える