我已经编写了这个简单的应用程序来根据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);
}
};
}
答案 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
是否合法,尽管我可能错了。