0

我是 Android 新手,现在我面临一个奇怪的问题,简而言之,问题是

“一旦屏幕旋转,接收 TCP 消息然后更改 GUI 的背景颜色将无效。”

我要归档的内容:

在Android设备上运行一个APP,通过TCP连接到PC。PC 可以向 APP 发送一个字符串,然后 APP 会根据收到的字符串做一些事情。在这种情况下,通过 TCP 将字符串“将背景颜色更改为红色(手机振动)/黑色”发送到 APP,因此 Android 用户将看到振动的致盲效果。

问题是什么:

我可以归档我想要的。但是一旦屏幕旋转,颜色就无法改变,只剩下震动。

我试过的:

我在APP上放了一个按钮,它将手动触发颜色变化事件(带振动)。即使我旋转屏幕,它也能正常工作。

进一步测试表明,TCP读取触发的改变背景颜色和动画等UI操作消失了,但铃声和振动保持不变。

我将视频上传到 Youtube http://youtu.be/n0gxXzzf-bo

下面是java代码,按钮和TCP调用相同的方法:ChangeColor()

public void ChangeColor(){
    Thread t= new Thread(new ChangeColorTest());        
    t.start();
}
public class ChangeColorTest  implements Runnable{


    public void run() {             
            try {
                    for(int i=0;i<3;i++){

                    mBlinkHandler.sendEmptyMessageDelayed(1, 0);                    
                    Thread.sleep(300);              
                    mBlinkHandler.sendEmptyMessageDelayed(2, 0);
                    Thread.sleep(300);                  

                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }   


}


Handler mBlinkHandler = new Handler(){
        @Override
        public void handleMessage(Message msg){
             super.handleMessage(msg);
            //   mScreen = (LinearLayout)findViewById(R.id.mylinerlayout);
             if(msg.what==1){
             mScreen.setBackgroundColor(Color.RED);
             Vibratoration();
             }else if(msg.what==2){
             mScreen.setBackgroundColor(Color.BLACK);
             }
        }
    };

我想知道什么?

如果有人可以找到解决方案,将不胜感激。

我的平台是什么? 服务器 PC:Win7 64bits VS2010 C# Android 平台:4.0 Samsung S2 开发 IDE:Motodev SDK API:Android 3

4

2 回答 2

3

一种解决方案是锁定屏幕使其无法旋转?(或者至少在此功能期间将其锁定。)

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
于 2012-08-21T16:06:08.963 回答
2

当您旋转屏幕时,Android 将重新创建整个活动 - 因此您的变量“mScreen”可能不会指向旋转后在屏幕上实际可见的实例。

您可以避免,android 重新创建活动,如下所述:http: //developer.android.com/guide/topics/resources/runtime-changes.html

于 2012-08-21T16:09:47.340 回答