我想开发一个应用程序,将采取一些从拨号盘和呼叫另一个号码代替。但我得到我想要呼叫的联系号码的数字格式异常。
这是在code。
公共类测试扩展的BroadcastReceiver {
公共无效的onReceive(上下文的背景下,意图意图){
如果(intent.getAction()。等于(Intent.ACTION_NEW_OUTGOING_CALL)){
//从捆绑的电话号码
。字符串phoneNumber的= intent.getExtras()的getString(Intent.EXTRA_PHONE_NUMBER);
// Toast.makeText(背景下,呼叫:+ phoneNumber的+ - ,Toast.LENGTH_LONGABORTING CALL).show();
//
如果(phoneNumber的==){
phoneNumber的=0;
}
INT checknumber =的Integer.parseInt(phoneNumber的);
如果(checknumber == 4444){
Toast.makeText(背景下,你好,Toast.LENGTH_LONG).show();
setResultData(空);
意图callIntent =新的意图(Intent.ACTION_CALL);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
callIntent.setData(Uri.parse(电话:6768886877));
context.startActivity(callIntent);
}
其他 {
Toast.makeText(上下文中,KKKK,Toast.LENGTH_LONG).show();
}
}
}
}
和下面是错误的我的日志
01-04 20:16:24.941:E / AndroidRuntime(28536):java.lang.RuntimeException的:无法启动接收器vu.alhadji.vudial.testing:java.lang中。 NumberFormatException异常:无效INT:2156689451
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2126)
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.app.ActivityThread.access $ 1500(ActivityThread.java:123)
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1197)
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.os.Handler.dispatchMessage(Handler.java:99)
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.os.Looper.loop(Looper.java:137)
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.app.ActivityThread.main(ActivityThread.java:4424)
01-04 20:16:24.941:E / AndroidRuntime(28536):在java.lang.reflect.Method.invokeNative(本机方法)
01-04 20:16:24.941:E / AndroidRuntime(28536):在java.lang.reflect.Method.invoke(Method.java:511)
01-04 20:16:24.941:E / AndroidRuntime(28536):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:812)
01-04 20:16:24.941:E / AndroidRuntime(28536):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:579)
01-04 20:16:24.941:E / AndroidRuntime(28536):在dalvik.system.NativeStart.main(本机方法)
01-04 20:16:24.941:E / AndroidRuntime(28536):java.lang.NumberFormatException:通过而产生的无效INT:2156689451
01-04 20:16:24.941:E / AndroidRuntime(28536):在java.lang.Integer.invalidInt(Integer.java:138)
01-04 20:16:24.941:E / AndroidRuntime(28536):在java.lang.Integer.parse(Integer.java:378)
01-04 20:16:24.941:E / AndroidRuntime(28536):在java.lang.Integer.parseInt(Integer.java:366)
01-04 20:16:24.941:E / AndroidRuntime(28536):在java.lang.Integer.parseInt(Integer.java:332)
01-04 20:16:24.941:E / AndroidRuntime(28536):在vu.alhadji.vudial.testing.onReceive(testing.java:24)
01-04 20:16:24.941:E / AndroidRuntime(28536):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2119)
01-04 20:16:24.941:E / AndroidRuntime(28536):10 ...更多
解决方案
这是因为 6768886877
是太大的一个数字一个 INT
。
使用一个长
代替。
长checkNumber =0升;
尝试{
checkNumber =的Long.parseLong(phoneNumber的);
}
赶上(NumberFormatException的E)
{
e.printStackTrace();
}
I'm trying to develop an app that will take a number from the dial pad and call another number instead. But i get a number format exception on the phonenumber i want to call.
this is the code.
public class testing extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
// get phone number from bundle
String phoneNumber = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);
// Toast.makeText(context, "Call: "+phoneNumber+" - ABORTING CALL.", Toast.LENGTH_LONG).show();
//
if (phoneNumber == "") {
phoneNumber = "0";
}
int checknumber = Integer.parseInt(phoneNumber);
if (checknumber == 4444) {
Toast.makeText(context, "hello", Toast.LENGTH_LONG).show();
setResultData(null);
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
callIntent.setData(Uri.parse("tel:6768886877"));
context.startActivity(callIntent);
}
else {
Toast.makeText(context, "kkkk", Toast.LENGTH_LONG).show();
}
}
}
}
and below is my the log of the error
01-04 20:16:24.941: E/AndroidRuntime(28536): java.lang.RuntimeException: Unable to start receiver vu.alhadji.vudial.testing: java.lang.NumberFormatException: Invalid int: "2156689451"
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2126)
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197)
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.os.Handler.dispatchMessage(Handler.java:99)
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.os.Looper.loop(Looper.java:137)
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.app.ActivityThread.main(ActivityThread.java:4424)
01-04 20:16:24.941: E/AndroidRuntime(28536): at java.lang.reflect.Method.invokeNative(Native Method)
01-04 20:16:24.941: E/AndroidRuntime(28536): at java.lang.reflect.Method.invoke(Method.java:511)
01-04 20:16:24.941: E/AndroidRuntime(28536): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:812)
01-04 20:16:24.941: E/AndroidRuntime(28536): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:579)
01-04 20:16:24.941: E/AndroidRuntime(28536): at dalvik.system.NativeStart.main(Native Method)
01-04 20:16:24.941: E/AndroidRuntime(28536): Caused by: java.lang.NumberFormatException: Invalid int: "2156689451"
01-04 20:16:24.941: E/AndroidRuntime(28536): at java.lang.Integer.invalidInt(Integer.java:138)
01-04 20:16:24.941: E/AndroidRuntime(28536): at java.lang.Integer.parse(Integer.java:378)
01-04 20:16:24.941: E/AndroidRuntime(28536): at java.lang.Integer.parseInt(Integer.java:366)
01-04 20:16:24.941: E/AndroidRuntime(28536): at java.lang.Integer.parseInt(Integer.java:332)
01-04 20:16:24.941: E/AndroidRuntime(28536): at vu.alhadji.vudial.testing.onReceive(testing.java:24)
01-04 20:16:24.941: E/AndroidRuntime(28536): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2119)
01-04 20:16:24.941: E/AndroidRuntime(28536): ... 10 more
解决方案
That's because 6768886877
is too big of a number for an int
.
Use a long
instead.
long checkNumber = 0l;
try{
checkNumber = Long.parseLong (phoneNumber);
}
catch (NumberFormatException e)
{
e.printStackTrace();
}