在我的应用程序中,我需要多次按意图拨打电话。这就是场景。1. 用户在界面中输入电话号码、延迟时间和尝试次数。2. 一旦用户在我的 UI 中按下拨号按钮,它将拨打电话并在指定的延迟后挂断。3. 挂断后,应用程序需要再次拨打电话,直到满足输入的尝试次数。
我使用 android ITelephony.aidl 和 java 反射来调用挂断功能。一次尝试,我可以成功终止通话。当我需要进行多次尝试时会出现问题。这是我的代码:
private void sendCommand(String number, int delay, int tries){
for(int i=0;i<tries;i++){
callPhone(number);
delayTimer(delay);
}
}
private void callPhone(String number){
String num = "0776355524";
Intent callIntent = new Intent(Intent.ACTION_CALL);
if(!(number.equalsIgnoreCase(""))){
num = number;
}
callIntent.setData(Uri.parse("tel:"+num));
startActivity(callIntent);
}
private void delayTimer(int delay){
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after delay
if(isOffhook()){
cancelCall();
}
}
}, delay);
}
private boolean isOffhook(){
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Log.v(TAG, "Get getTeleService...");
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(tm);
return telephonyService.isOffhook();
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "Error in accessing Telephony Manager: "+ e.toString());
telephonyService = null;
}
return false;
}
private void cancelCall(){
Log.d(TAG, "Ending call..."+ incomingNumber);
try {
if(telephonyService != null)
telephonyService.endCall();
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "Error in accessing Telephony Manager: "+ e.toString());
}
}
我在代码中做错了什么。在此先感谢,哈萨拉