我制作了一个 Android 应用程序,它只需调用您输入的号码范围即可。 从您输入的起始编号开始,以您输入的“完成”编号结束。响铃 7 秒后应用程序自动挂断。 代码如下。
public void onClick(View view){
EditText starte = (EditText) findViewById(R.id.start);
EditText finishe = (EditText) findViewById(R.id.finish);
EditText prefixes = (EditText) findViewById(R.id.prefixes);
String prefix = prefixes.getText().toString();
/** Get Telephone number String **/
int startOriginal = Integer.parseInt(starte.getText().toString());
int finish = Integer.parseInt(finishe.getText().toString());
for (int start = startOriginal; start<=finish; start++) {
startCall(prefix, Integer.toString(start));
try {
Thread.sleep(7000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
new CallUtilities("endcall");
}
private void startCall(String prefix, String nr){
Intent intent = new Intent("android.intent.action.CALL");
Uri data = Uri.parse("tel:"+ prefix + nr);
/** Setting intent data */
intent.setData(data);
/** Starting the caller activity by the implicit intent */
startActivity(intent);
}
CallUtilities类是我写的,只是通过反射方法结束调用。现在我的问题是,当您输入起始数字和结束数字时,应用程序似乎总是调用第一个数字,例如 1,挂起后它会直接转到 3,然后转到 4 和 5 等等,就像它应该做的那样。知道哪里出了问题吗? 另外,是否可以在此处使用 DisconnectCause 来获取断开连接的原因,以防调用过早挂断? 预先感谢您!
最佳答案
这是一场灾难。由于一些原因。
您(假设 onClick(View v)
在 UI 线程上运行)尝试 hibernate UI 线程。
如果UI线程挂起时间超过5秒,就会导致ANR。
此外,您似乎正在尝试同时启动多个 Activity 。这当然不是设计应用程序的正确方法。
更不用说使用Reflection来访问核心Android组件来结束调用了。这可能会导致您的应用将来出现问题。
我对多项 Activity/ sleep 问题的建议:
- 删除循环
- 存储下一个尝试的号码
- 运行调用函数
- 在 onActivityResult您可以确定下一个要尝试的号码
- 转到 2。(确保包含结束条件!
关于java - For 循环使用 Thread.Sleep 跳过两次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34766259/