Android 如何获取带有日期和时间的呼出电话号码?

Android 如何获取带有日期和时间的呼出电话号码?,android,android-studio,android-broadcastreceiver,Android,Android Studio,Android Broadcastreceiver,我正在获取来电详细信息(号码、姓名、日期)。但如何获取传出呼叫的详细信息。我已经为传出呼叫详细信息编写了一个代码,但它抛出了NullPointerException。下面是我的MyCallReceiver.java文件和清单文件 public void onReceive(Context context, Intent intent) { this.context = context; if (intent.getStringExtra(TelephonyManage

我正在获取来电详细信息(
号码、姓名、日期
)。但如何获取传出呼叫的详细信息。我已经为传出呼叫详细信息编写了一个代码,但它抛出了
NullPointerException
。下面是我的
MyCallReceiver
.java文件和清单文件

  public void onReceive(Context context, Intent intent) {

    this.context = context;



    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {

        String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

        Toast.makeText(context, "Call From : " + incomingNumber, Toast.LENGTH_LONG).show();

        doToast(getContactName(context, incomingNumber) + " " + incomingNumber);
        String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
        doToast(currentDateTimeString +" "+incomingNumber);


    } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE) || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
        Toast.makeText(context, "DETECTED CALL HANG UP EVENT", Toast.LENGTH_LONG).show();

        String outgoingNumber=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Toast.makeText(context,"Calling To :"+outgoingNumber,Toast.LENGTH_LONG).show();
    }
 }

首先,intent.getStringExtra(intent.EXTRA\u PHONE\u NUMBER)在手机处于空闲状态时为您提供传出号码,并在手机状态变为OFF\u HOOK时变为“null”


最简单的方法是在另一个OnReceive发生之前保存该号码。

为不同的事件(即传入和传出呼叫)创建单独的侦听器可能会让您的生活更轻松。对于传出呼叫,您可能需要创建一个
IntentFilter
,而不是检查TelephonyManager的状态

IntentFilter filterCalls = new IntentFilter();
filterCalls.addAction(Intent.ACTION_NEW_OUTGOING_CALL);
MyCallReceiver myCallReceiver = new MyCallReceiver();
registerReceiver(myCallReceiver, filterCalls);
然后在您的
onReceive
中,您只需:

 String outgoingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)

并确保它能工作。

舱单在哪里?我使用了String outgoingNumber=intent.getStringExtra(intent.EXTRA\u PHONE\u NUMBER);在我的else if部分,但我收到了错误。你能告诉我应该在哪里更新我的代码以获得呼出电话号码吗?我不确定,删除摘机条件。你可能会得到电话号码。兄弟…一切都很好,但是,时间呢??和日期??,甚至我也在寻找同样的东西。我得到呼出电话号码,但我需要准确的呼出时间。帮帮我!!!
public void onReceive(Context context, Intent intent)
{
    String state=intent.getStringExtra(TelephonyManager.EXTRA_STATE);

    if(state==null)
    {
        //Outgoing call
        String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Log.i("tag","Outgoing number : "+number);
    }
    else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING))
    {
        //Incoming call
        String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
        Log.i("tag","Incoming number : "+number);
    }
}