我必须创建一个 Android 应用程序,以准确的时间闪烁屏幕打开/关闭,以便通过可见光向外部设备发送类似摩尔斯电码的消息。到目前为止,我的实验都失败了,因为操作系统似乎干扰了我的“postAtTime”请求并弄乱了我的时间。
有没有人建议我如何至少每 50 毫秒以正负 5% 的精度打开/关闭 Android 屏幕(黑/白)?
谢谢你。
我必须创建一个 Android 应用程序,以准确的时间闪烁屏幕打开/关闭,以便通过可见光向外部设备发送类似摩尔斯电码的消息。到目前为止,我的实验都失败了,因为操作系统似乎干扰了我的“postAtTime”请求并弄乱了我的时间。
有没有人建议我如何至少每 50 毫秒以正负 5% 的精度打开/关闭 Android 屏幕(黑/白)?
谢谢你。
你可以试试这个:
package some.pkg.name;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class SplashScreen extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
Handler handler = new Handler();
// run a thread after 5 seconds to start the home screen
handler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
// start the home screen
Intent intent = new Intent(SplashScreen.this, TargetActivity.class);
SplashScreen.this.startActivity(intent);
}
}, 5000); // time in milliseconds (1 second = 1000 milliseconds) until the run() method will be called
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/splash_image"/>
<activity android:name=".SplashScreen"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">
</category></action></intent-filter>
</activity>
我会尝试在视图上使用动画。您可以使用黑色背景和全屏白色视图,并以动画方式打开和关闭视图的可见性。
使用 CountDownTimer 类及其 onTick 方法。
您可以设置闪烁时间的毫秒数,在 CountDownTimer 的 onTick 方法中编写动画逻辑代码。
您只需要编写一个扩展 CountdownTimer 的类,然后在您的活动的 onCreate 中调用 countdowntimerOBJECT.start()。您可以使用黑色背景和全屏白色视图,并以动画方式打开和关闭视图的可见性。
使用postAtTime()
会增加太多开销。您可以尝试使用动画,甚至尝试旧的、基于循环/睡眠的方法。对于动画,请参阅此处的文档(此处的教程),对于循环/睡眠:通过执行即 10 次闪烁并查看需要多长时间来校准您的设备上的应用程序。然后你知道单次闪光需要多少时间。相应地调整sleep()
以获得所需的闪光率。或者,您可以尝试 Handler's postDelayed()
,但在这种情况下它会相当无效。