我好像来了很多次!!
我知道这个问题已经在这里和其他地方被问过,我已经尝试实施发布的答案,但它对我不起作用
我有一个活动, ( Activity A
) 基于 if 语句,它开始Activity B
。我的问题是Activity A
一直在运行,并且在Activity A
我播放警报和振动手机时,两者都继续运行,并且在Activity B
启动和运行时(我可以在 logcat 中看到)它永远不会因此而出现在前面。
这是我的 if 语句代码
if (dynamicActivation > threshold) {
alarmHandler.post(new Runnable() {
public void run() {
int duration = Toast.LENGTH_SHORT;
CharSequence text = "YOUR CHILD HAS TRAVELLED OUTSIDE PROXIMITY";
Context context = getApplicationContext();
proximityAlert = Toast.makeText(context, text,
duration);
proximityAlert.show();
alarmSound.start();
//v.vibrate(3000);
try {
Thread.sleep(5000);
openMaps();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
这是openMaps()
函数的代码
public void openMaps() {
Class track = ParentReal.class;
Intent PRealIntent = new Intent(this, track);
PRealIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(PRealIntent);
ANN.this.finish();
}
如果它引起问题,我应该补充一点,即有另一个活动,一个菜单,一旦单击一个按钮,它就会打开Activity A
......一旦我开始,我是否应该关闭菜单活动Activity A
?
提前致谢!
编辑
我不确定为什么要投反对票,但我会尝试解释我的问题,我有三个活动 A、B、C。A 是我的菜单,单击按钮后它会启动活动 B,在活动 B 中,基于if 语句的结果 活动 C 开始。
问题是C运行,进程可以在logcat中看到但没有打开。B 继续播放闹钟和振动,然后手机停止,闹钟和振动继续。我有上面 if 语句的代码和 openMaps() 函数的代码,这是根据 if 的结果调用的,在其中我尝试打开 Activity C 并关闭 B
我希望这更清楚;)
另一个编辑
好的,我知道问题是什么,我只是不知道如何解决它。我有一个线程,在该线程内部是一个无限的while循环,在这个无限的while循环中,我检查两个坐标之间的距离(我希望它们不断更新)。
问题是,我全局声明的变量是在循环中初始化的,所以我必须在其中运行我的 if 语句,以访问那些......我尝试使用布尔“测试”,如果它是真的执行 if 语句然后设置测试为假,但恐怕这不起作用。
这是我的代码
Thread dist = new Thread(new Runnable() {
public void run() {
while (true) {
child = new Location("point A");
child.setLatitude(Clatitude);
child.setLongitude(Clongitude);
parent = new Location("point B");
parent.setLatitude(Platitude);
parent.setLongitude(Plongitude);
distance = child.distanceTo(parent);
DisRound = 550;
dynamicActivation = DisRound * weight;
try {
Thread.sleep(1000);
if (test)
{
if(dynamicActivation > threshold)
{
finish();
new Timer().schedule(new MapsTimer(), 5000);
test = false;
}
Log.d("ACTIVATION", Boolean.toString(test));
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
dist.start();
这是 MapsTimer 任务
private class MapsTimer extends TimerTask {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
int duration = Toast.LENGTH_SHORT;
CharSequence text = "YOUR CHILD HAS TRAVELLED OUTSIDE PROXIMITY";
Context context = getApplicationContext();
proximityAlert = Toast.makeText(context, text, duration);
proximityAlert.show();
alarmSound.start();
openMaps();
}
});
}
}
我在 if 语句中调用完成。我已经在这里呆了 10 个小时了,我的脑袋都快融化了,我敢肯定这很简单,但只有当你知道怎么做的时候!!
问候,加里