【问题标题】:When onCallStateChanged receives an unknown call(masked number), the android application crashed当 onCallStateChanged 收到未知呼叫(屏蔽号码)时,android 应用程序崩溃
【发布时间】:2014-01-29 11:24:15
【问题描述】:

我想获得打电话给我的应用程序的电话号码。但是当我收到一个被屏蔽的号码时,我的应用程序崩溃了。我使用 onCallStateChanged()。我已经简化了我的测试代码。它仍然崩溃了。这是代码(它们在活动中):

 public void onCreate() {
    super.onCreate();
    TelephonyManager manager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
    manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
 }

private PhoneStateListener listener = new PhoneStateListener(){
    @Override
    public void onCallStateChanged(int state, String incomingNumber){
        switch (state) {
        case TelephonyManager.CALL_STATE_RINGING:
            if(incomingNumber.isEmpty()){
                Log.i("PhoneStateListener incomingNumber", "void");
            }else{
                Log.i("PhoneStateListener incomingNumber", "not void");
            }
            break;
        case TelephonyManager.CALL_STATE_IDLE:
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            break;
        default:
            break;
        }
    }
};

还有我遇到的错误:

01-29 12:10:37.479: W/dalvikvm(7141): threadid=1: thread exiting with uncaught exception (group=0x41ddc700)
01-29 12:10:37.484: E/AndroidRuntime(7141): FATAL EXCEPTION: main
01-29 12:10:37.484: E/AndroidRuntime(7141): java.lang.NullPointerException
01-29 12:10:37.484: E/AndroidRuntime(7141):     at com.aif.app.MonitorCallingService$1.onCallStateChanged(MonitorCallingService.java:77)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:454)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at android.os.Looper.loop(Looper.java:176)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at android.app.ActivityThread.main(ActivityThread.java:5419)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at java.lang.reflect.Method.invoke(Method.java:525)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
01-29 12:10:37.484: E/AndroidRuntime(7141):     at dalvik.system.NativeStart.main(Native Method)

是否可能是函数 onCallStateChanged() 中存在内部错误,带有掩码?

有人可以帮助我吗?非常感谢。

【问题讨论】:

    标签: android call telephonymanager phone-state-listener


    【解决方案1】:

    我的猜测:参数incomingNumber 为空。所以更改 if 语句:

    if(incomingNumber != null || incomingNumber.isEmpty())
    

    【讨论】:

    • 查看我自己的答案。这是一个空字符串和一个空字符串的问题。真的谢谢。
    【解决方案2】:

    onCallStateChanged() 接收到未知号码时,参数incomingNumber 为null,不是字符串对象。所以任何对对象字符串函数的调用都会调用错误。因为对象不存在。所以 if 中的条件应该只是

    if(incomingNumber!=null) or if(incomingNumber==null)
    

    是空字符串和空字符串的问题。

    【讨论】:

      【解决方案3】:

      在 onCallStateChanged 中使用 try catch 块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        • 2019-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多