Изменение цвета фона не имеет эффекта после поворота экрана
все, что я новичок в Android, и теперь я столкнулся с странной проблемой, проблема в том, что
"Получение TCP-сообщения, а затем изменение цвета фона графического интерфейса не влияет, как только экран был повернут".
Что я хочу архивировать:
Попросите приложение APP, работающее на устройстве Android, подключиться к ПК через TCP.
ПК может отправить строку в APP, тогда APP сделает что-то на основе полученной строки.
В этом случае строка "изменить цвет фона земли на красный (с вибрацией телефона)/черный" отправляется в APP через TCP, поэтому пользователь Android увидит ослепляющий эффект с вибрацией.
В чем проблема:
Я могу архивировать то, что хочу. Но как только экран повернут, цвет не может быть изменен, останется только вибрация.
Что я пробовал:
Я помещаю кнопку на APP, которая вручную инициирует событие изменения цвета (с вибрацией). Он отлично работает, даже если я поворачиваю экран.
Дальнейший тест показывает, что пользовательский интерфейс, такой как цвет фона и анимация изменения, вызванный чтением TCP, исчез, однако мелодия и вибрация остаются неизменными.
Я загружаю видео на 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);
}
}
};
Что я хочу знать?
Если бы кто-то мог найти решение, было бы очень полезно.
Что такое платформа?
Сервер ПК: Win7 64bits VS2010 С#
Android-платформа: 4.0 Samsung S2
Разработка IDE: Motodev
SDK API: Android 3
Ответы
Ответ 1
Android будет воссоздавать всю активность при повороте экрана - поэтому, вероятно, ваша переменная "mScreen" не будет указывать на экземпляр, который фактически отображается на экране после вращения.
Вы можете избежать, что андроид воссоздает активность, как описано здесь:
http://developer.android.com/guide/topics/resources/runtime-changes.html
Ответ 2
Одним из решений было бы заблокировать экран, чтобы он не мог быть повернут? (Или, по крайней мере, заблокировать его во время этой функции.)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);