我在ViewFlipper does not restart flipping if Screen Lock is set to None上发现了同样的问题:
ViewFlipper小部件的一个很酷的功能是它会在屏幕熄灭时自动停止翻转,如果它继续,则重新开始翻转。
不幸的是,如果没有设置屏幕锁定(设置>安全>屏幕锁定>无),Intent.ACTION_USER_PRESENT永远不会广播到系统,并且ViewFlipper无法重启(永远)。
可能的修复方法是:
a)重启ViewFlipper在ACTION_SCREEN_ON而不是ACTION_USER_PRESENT上翻转。 b)如果没有设置屏幕锁定并且屏幕继续,则广播ACTION_USER_PRESENT。
重现错误的步骤:
结果:ViewFlipper不再是动画
Expected result: the ViewFlipper must be animated again.
看来这个问题还没有解决。我想在我自己的应用程序中修复它。有什么办法吗?
我试图解决它。我在我的代码中发送了广播员Intent.ACTION_SCREEN_ON
。但它抛出异常:
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.USER_PRESENT from pid=XXX, uid=XXX
然后我检查了源代码,发现这些广播公司仅供系统使用。失败。
答案 0 :(得分:6)
你可以尝试这个,它应该有效:
删除活动中的每个startFlipping()或stopFlipping()或setAutoStart()或setFlipInterval()。
现在将其添加到您的活动中:
代码:
private boolean isStarted = false;
private void runFlipper() {
if (isStarted == false) {
Message msg = mHandler.obtainMessage(42);
mHandler.sendMessageDelayed(msg, 3000);
isStarted = true;
}
}
private void stopFlipper() {
mHandler.removeMessages(42);
isStarted = false;
}
@SuppressLint("HandlerLeak")
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 42) {
Log.d("ImageFlipper", "Next picture...");
viewFlipper.showNext();
msg = obtainMessage(42);
sendMessageDelayed(msg, 3000);
}
}
};
(“viewFlipper”是viewFlipper =(ViewFlipper)this.findViewById(R.id.view_flipper);)
如果有效,请不要忘记清理代码;)
private static final int DELAY_MSG = 42;
private static final int DELAY = 3000;
答案 1 :(得分:1)
如果“屏幕锁定”设置为“无”,则ViewFlipper不会重新启动翻转。这个问题需要通过android框架来解决。