簡體   English   中英

對於 API > 29 和 API < 29 對於 Android 應用程序,我需要獲取來電電話號碼和該號碼的通話記錄的最低權限是多少?

[英]What are the minimum permissions I need to get incoming phone number and call history for that number for API > 29 and API < 29 for Android app?

我希望為我的 Android 應用程序訪問以下功能:

  • DONE檢測來電狀態(通過EXTRA_STATE實現,更多信息見下文)
  • 獲取來電號碼(不知道API > 29如何,見下文)
  • 獲取傳入號碼的歷史記錄(這是可選的,因為我的應用程序可以構建電話歷史記錄,因為我只需要在此階段短期使用它,因此如果我無法輕松訪問未接/已接聽的通話記錄,我可以在技術上在我的應用程序中構建它只有號碼。

通過研究,我發現對於舊版本,我可以簡單地使用

intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

And I would get the number but it does not work for API > 29 (number comes out as null for API = 29 because it is deprecated in API level 29 .). 另外,我不確定僅獲取該號碼的歷史記錄的最簡單方法是什么。

我可以使用inCallService並且 Google 建議創建默認電話應用程序,該應用程序可能是默認呼叫應用程序,並為我提供所有必需的權限。 但是,我的應用程序不需要所有這些權限,理想情況下它不應該是一個完整的呼叫應用程序,它只是一個可以在默認應用程序之上運行的功能,因此我正在尋找需要最少數量的替代方案谷歌實際上會授予我的權限。

我還向用戶詢問 PHONE_CALL_STATE 以便通過 EXTRA_STATE 獲取 PHONE_STATE,它只允許我知道呼叫何時開始、結束、接聽和錯過。 但是我需要一個號碼本身和一些未接/接聽電話的歷史記錄以及不同的 API。

任何幫助將不勝感激。

根據文檔,如果接收方應用程序具有READ_CALL_LOG (除了READ_PHONE_STATE權限),則提供EXTRA_INCOMING_NUMBER

添加 READ_CALL_LOG 后,您會注意到您的應用程序將開始接收該廣播兩次,一次是getString(EXTRA_INCOMING_NUMBER)返回 null,另一次是getString(EXTRA_INCOMING_NUMBER)包含實際數字。 請參閱此處的文檔說明

筆記:

  • 不能保證 2 個廣播的順序,所以如果你得到 2 個廣播,其中一個有EXTRA_INCOMING_NUMBER = null,你可以忽略那個。
  • EXTRA_INCOMING_NUMBER僅在來電時收到,無法獲取撥出電話的號碼
  • 在 API >= 29 上確實不推薦使用該額外功能,但這僅意味着您的targetSdk (在您的 gradle 文件中)應該小於 29 才能正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM