我有一个应用程序,它可以读取数字文件。预先定义一个阈值,并将文件中的每个数字与阈值一一进行比较。当读取的数量大于阈值时,通过按钮显示警报。如果 2 分钟内未按下按钮,请发送短信。如果按钮再过两分钟仍未按下,则调用电话。
我遇到的问题是计算耗时,并在经过一定时间后触发前面提到的两种方法之一。如何定义以及在哪里定义。我见过很多使用处理程序、计时器和 Runnable 方法的示例,但尝试过但没有成功。当我运行该应用程序时,什么也没有发生。
这是到目前为止我的代码,将不胜感激任何建议或想法。
使用处理程序
private static final int MISS_LIMIT = 1000;
int misses = 0;
final Handler handler = new Handler();
final Runnable timer = new Runnable() {
@Override
public void run()
{
handler.postDelayed(timer, MISS_LIMIT);
// user too late: increment miss counter
if (++misses >= MISS_LIMIT)
{
//TODO miss limit reached
Toast.makeText(MainActivity.this, "Time is passed", Toast.LENGTH_SHORT).show();
finish(); // close this activity
}
}
};
其余代码:
int Threshold = 40;
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
File dir = Environment.getExternalStorageDirectory();
File file = new File(dir, "/Numbers.txt");
try
{
FileInputStream fin = new FileInputStream(file);
if (fin != null)
{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fin));
String line ="";
while((line= bufferedReader.readLine()) != null)
{
if (Integer.parseInt(line) > Threshold)
{
//store value in integer
int number = Integer.parseInt(line);
// create alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder
.setTitle("Alert !!")
.setMessage("High Temperature !!" + "\t" + number)
.setPositiveButton("Send SMS",new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int id)
{
// if this button is clicked, close current activity
MainActivity.this.finish();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.holo_red_light);
alertDialog.show();
}
}
fin.close();
也许您可以进行以下更改以使其正常工作。
假设您正在从 initiateDialog 方法调用对话框
void initiateDialog(){
//Show Alert
//Your existing code for Dialog
AlertDialog alertDialog = builder.create();
alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.holo_red_light);
alertDialog.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonNotPressedFirst();
}
}, FIRST_DELAY);
}
void buttonNotPressedFirst(){
//SEND SMS
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
buttonNotPressedSecond();
}
}, SECOND_DELAY);
}
}
void buttonNotPressedSecond(){
//Proceed with phone call
}
我是一名优秀的程序员,十分优秀!