2

我必须创建一个 Android 应用程序,以准确的时间闪烁屏幕打开/关闭,以便通过可见光向外部设备发送类似摩尔斯电码的消息。到目前为止,我的实验都失败了,因为操作系统似乎干扰了我的“postAtTime”请求并弄乱了我的时间。

有没有人建议我如何至少每 50 毫秒以正负 5% 的精度打开/关闭 Android 屏幕(黑/白)?

谢谢你。

4

4 回答 4

1

你可以试试这个:

闪屏.java

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

}

}

splash_screen.xml

       <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>
于 2012-11-20T17:46:06.610 回答
0

我会尝试在视图上使用动画。您可以使用黑色背景和全屏白色视图,并以动画方式打开和关闭视图的可见性。

于 2012-11-20T17:34:06.390 回答
0

使用 CountDownTimer 类及其 onTick 方法。

您可以设置闪烁时间的毫秒数,在 CountDownTimer 的 onTick 方法中编写动画逻辑代码。

您只需要编写一个扩展 CountdownTimer 的类,然后在您的活动的 onCreate 中调用 countdowntimerOBJECT.start()。您可以使用黑色背景和全屏白色视图,并以动画方式打开和关闭视图的可见性。

于 2012-11-20T18:41:14.737 回答
0

使用postAtTime()会增加太多开销。您可以尝试使用动画,甚至尝试旧的、基于循环/睡眠的方法。对于动画,请参阅此处的文档(此处教程),对于循环/睡眠:通过执行即 10 次闪烁并查看需要多长时间来校准您的设备上的应用程序。然后你知道单次闪光需要多少时间。相应地调整sleep()以获得所需的闪光率。或者,您可以尝试 Handler's postDelayed(),但在这种情况下它会相当无效。

于 2012-11-20T17:35:18.793 回答