在我的应用程序中,我需要多次通过一个意图进行调用。 这就是场景。 1.用户在界面中输入电话号码,延迟时间和尝试次数。 2.一旦用户按下我的UI中的拨号按钮,它将拨打电话并在指定的延迟后挂断。 3.挂断后,应用程序需要再次拨打电话,直到输入的尝试次数满足为止。
我使用android ITelephony.aidl和java反射来调用hangup函数。对于一次尝试,我可以成功终止呼叫。当我需要多次尝试时会出现问题。 这是我的代码:
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());
}
}
我的代码中出错了什么。 提前致谢, Hasala
答案 0 :(得分:0)
这不起作用:
for(int i=0;i<tries;i++){
callPhone(number);
delayTimer(delay);
}
此循环调用该号码,然后在一段时间后将Runnable
发布到挂起。然后立即再次拨打该号码。您需要等待延迟再次拨打该号码。这样做一次(不是循环):
callPhone(number);
delayTimer(delay);
然后,在Runnable
中,执行此操作:
// Do something after delay
if(isOffhook()){
cancelCall();
}
// now call the number again
callPhone(number);
// reschedule the delay
delayTimer(delay);
您必须跟踪某处的尝试次数,以便知道何时停止。