Android下的來電管理——呼叫隱藏的API
感覺下面這種方法不科學,目前我不是使用這種方式接聽和拒絕的。
Android 的API裡沒有直接提供方法可以接聽電話,其實接聽電話、撥打電話這些通訊方面的功能在最底層是通過傳送AT 指令實現,傳送AT指令要開啟linux系統/dev/目錄下的某個AT口裝置檔案,不同的手機和不同的韌體,這個檔名都不相同,所以用這種底層的方法實現比較麻煩(涉及到linux系統程式設計和通訊方面的知識)。 既然Android系統的應用層通過介面就能撥打電話、接聽電話,Android FrameWork的原始碼又是公開的,從原始碼出發。
關鍵檔案 :frameworks/base/telephony/java/com/android/internal/telephony/Phone.java
Phone.java 是一個interface,提供很多和手機相關的方法,有我們要找的拒絕來電rejectCall()和接聽來電acceptCall(),還有其它如鎖定手機網路型別(GSM,WCDMA等 )...Phone只是一個介面,應該怎樣例項化呢?在相同目錄下可以找到PhoneFactory 這個類,裡面的靜態方法getDefaultPhone()可以例項化一個Phone物件(會根據當前手機型別例項化成GsmPhone或CdmaPhone,當然Wcdma的也會例項化成GsmPhone,這個不多說,至於TD手機,問中國移動要程式碼去吧 )。
用PhoneFactory的靜態方法直接例項化Phone這個物件,Phone的函式就可以任意呼叫了,我們現在只關心rejectCall()和accptCall()這兩個函式。
程式碼如
//引用未公開的API
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephone.CallStateException;
public class MyPhone(){
private Phone mPhone = null;
public MyPhone(){
mPhone = PhoneFactory.getDefaultPhone();
}
/**打電話*/
public void call(String number){
try
{
connection = phone.dial( number );
}
catch(CallStateException e){
//Log.e(tag,e.toString() );
}
}
/**接電話*/
public void acceptCall(){
try
{
phone.acceptCall();
}
catch(CallStateException e){
//Log.e(tag,e.toString() );
}
}
/**拒接電話*/
public void rejectCall(){
try{
phone.rejectCall();
}catch(CallStateException e){
//Log.e(tag,e.toString() );
}
}
}
把程式碼放到Eclipse裡吧,會發現根本無法import兩個關鍵的類名Phone和PhoneFactory,因為androd.jar包裡不包含這兩個類,Google沒有把它們放在SDK裡,至少目前SDK1.5-2.2都是沒有的,可能是牽涉到法律問題吧。
要引用這此未公開到SDK裡的API,可以直接在原始碼環境下把應用程式編譯成apk檔案。
相關推薦
Android下的來電管理——呼叫隱藏的API
感覺下面這種方法不科學,目前我不是使用這種方式接聽和拒絕的。 Android 的API裡沒有直接提供方法可以接聽電話,其實接聽電話、撥打電話這些通訊方面的功能在最底層是通過傳送AT 指令實現,傳送AT指令要開啟linux系統/dev/目錄下的某個AT口裝置檔案,不同
突破Android P(Preview 1)對呼叫隱藏API限制的方法
奇技指南 在之前的文章《Android P 呼叫隱藏API限制原理》中,我們分析了Android P Preview 1版本對隱藏API呼叫限制的原理,這次我們帶來了繞過限制的的方法。 本文首發於公眾號奇卓社,已授權轉載。 概要 本文基於對AndroidP(Previ
Android P 呼叫隱藏API限制原理
隨著Android P預覽版的釋出,谷歌在改進系統穩定性的措施上又增加了新的限制,即應用程式引用非SDK介面,無論採用直接、反射、JNI獲取等手段都將受到限制。在谷歌提供的預覽版文件&&App Compatibility Changes一節中,我們可以知道如下資
Android黑名單來電管理
public class BlocklistDbHelper extends SQLiteOpenHelper { private final static String TAG = "BlocklistDbHelper"; public static final String DA
android 隱藏API顯式呼叫以及內部資源使用方法
一、android.jar包 android.jar是我們Android應用開發包,它內部包含了我們在應用開發中需要使用的所有API呼叫。 二、顯式使用 Android 隱藏 API 和內部 API 在進行Android應用開發的時候,一般會選擇指定的編譯
Android下的配置管理之道之使用curl命令訪問gerrit的REST API
簡單的測試 reset api 可以像下面這樣 curl http://localhost:8080/path/to/api/ curl命令預設是傳送GET請求的,可以通過選項 -X來設定 cu
Android下的配置管理之道之repo的使用
谷歌對android的原始碼管理使用的是git。但是在git的基礎上,谷歌開發出來了一套新的工具,python寫的一套指令碼,名字是repo。 Android原始碼工程(AOSP)是非常多的git倉庫組成的。目前估計有上百個獨立的git倉庫。 怎麼管理這些倉
聽說 Android 9.0 要禁用 @Hide Api 的呼叫,你怎麼看?
Android 9.0? Hi,大家好,我是承香墨影! 距離 Android 8.0 釋出,已經過了五個月,雖然現在佔有率並不高,不過呢,Google 已經著手準備下一版本的 Android 系統。 上週,據快科技爆出來的訊息,在 XDA社群 有人
Openwrt下C呼叫UCI API
“uci”是”Unified Configuration Interface”(統一配置介面)的縮寫,意在OpenWrt整個系統的配置集中化。 許多程式在系統某處擁有自己的配置檔案,比如/etc/network/interfaces, /etc/expor
Android studio使用SDK隱藏API方法
方法一:1. 編譯 Android 原始碼 2. 找到 \out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.ja
在Android下利用Shell命令管理網路介面
為啥要使用shell命令操縱本地網路?因為這樣就可以繞過上層connectService來幹一些事情,至於具體要乾點什麼事情,容我先賣個關子在以後的blog裡說明。 首先進入adb shell,然後去Ping一個伺服器的ip地址 ping 211.69.198.222 P
linux下系統呼叫、API、系統命令,核心函式的區別與聯絡
1.系統呼叫: 應用程式和核心間的橋樑,是應用程式訪問核心的入口點;但通常情況下,應用程式通過作業系統提供的API進行程式設計而不是使用系統呼叫直接程式設計; linux的全部系統呼叫加起來大約只有250個左右。 2.API: API常以c庫(libc)的形式提供,
Android下列印呼叫棧
1. Java層如何列印呼叫棧? 在優化Android啟動過程時,同事給出一種打印出呼叫棧的函式。分享一下 java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllStack
Android下的配置管理之道之主從gerrit配置使用replication外掛
gerrit配置使用replication外掛 最終實現的效果如下圖所示 實現員工下帶程式碼從一個從gerrit下載,上傳程式碼到主gerrit上。 首先是主gerrit伺服器上面要配置一下s
Android下編譯自己的庫檔案jar並在應用中呼叫
主要為了解決如下問題:專案中使用了Android未公開的API,在Eclipse下會有紅叉顯示。不同的專案抽出相同部分的程式碼共用。必需的前提條件:需要有Android原始碼,編譯的庫檔案主要是封裝未公開API或者共用程式碼。工程1:Java庫檔案工程該工程最終會生成以
Android 下隱藏虛擬導航欄的方法,不需要root,需要的時候調出,彈dialog不會閃現
相信做安卓開發的人員對虛擬導航欄都有著特殊的經歷,在沒有root的情況下,如果隱藏它? 有的時候我們需要這樣一個場景,它會自動隱藏,不論我點選螢幕,或者彈出dialog,都不希望它彈出來,只有我需要用的,手指上劃顯示即可,不需要的時候永遠不要出來。 筆者也
Android提高第十三篇之探祕藍芽隱藏API
package com.testReflect; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import
android下如何實現EditText顯示隱藏密碼的實現,
在Google釋出了support:design:23+以後我們發現有這麼一個東西TextInputLayout,先看下效果圖: <android.support.design.widget.TextInputLayout a
匯入Android系統原始碼jar包, 使用所有隱藏API的方法
一.編譯Android原始碼,假設原始碼在Z:\android2.3.4_GB_T34,編譯完成後在Z:\android2.3.4_GB_T34\out\target\common\obj\JAVA_LIBRARIES\framework_intermediates目錄下會生
android中webView JS呼叫Android的方法、webView的下拉重新整理(SwipeRefreshLayout)、下載檔案
最近一直在寫webView的東西,發現有好多功能點,記一下。 JS呼叫Android的方法: 在JS中:寫 window.JavaScriptinterface.closecurrent(); 在Adnriod中: webView.ad