-2

我好像来了很多次!!

我知道这个问题已经在这里和其他地方被问过,我已经尝试实施发布的答案,但它对我不起作用

我有一个活动, ( 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 个小时了,我的脑袋都快融化了,我敢肯定这很简单,但只有当你知道怎么做的时候!!

问候,加里

4

2 回答 2

1

您的问题和代码尚不清楚,但通常在将您切换到活动 B 的代码之后,您应该调用完成活动 A 的 finish()

于 2013-04-23T13:39:51.353 回答
0

谢谢大家的帮助,我自己整理的。我只是在 while 循环中插入了一个中断。如下:

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 = Math.round(distance * 100.0) / 100.0;
                DisRound = 550;

                dynamicActivation = DisRound * weight;                          

                try {
                    Thread.sleep(1000);

                        if(dynamicActivation > threshold)
                        {   
                            proximityAlert.show();
                            alarmSound.start(); 
                            new Timer().schedule(new MapsTimer(), 5000);
                            break;                          
                        }   
                        Log.d("ACTIVATION", Boolean.toString(test));

                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            finish();
        }
    });
    dist.start();

因此,一旦显示警报,播放警报并调用 mapsTimer,它就会跳出无限循环,不再需要它,然后我调用 finish();

于 2013-04-23T19:04:09.087 回答