我正在开发一款Android应用程序,通过蓝牙与传感器进行通信。
我附上了我的代码的快照。这是写在服务
中我希望我的Android手机屏幕在我的传感器上点击(g力值> 0.5 g(代码中为yAccel> 500))时会被锁定,当我点击我的传感器时它应该被解锁(锁定一次后)传感器小于0.1g。
My Logic实现:我声明了一个名为lockStatus的变量(initialize = 2)。一旦检测到点击,设置lockStatus = 1和锁定屏幕(screenLock.class),继续检查它是否已经锁定并且第二次点击<检测到0.1 g。解锁它。 如果它已被锁定且未检测到敲击,请将其保持在锁定状态(screenLock.class)
我的问题:
至于我继续申请> 0.5g力,屏幕被锁定(ScreenLock.class),当我从0.5g减少它,屏幕解锁。
原因:这是写在服务内部(因为蓝牙服务应该继续运行)。所以当下,下一个数据(即使在第一次锁定后也没有点击)通过我的传感器的蓝牙发送,lockStatus稳定到2,然后进入其他块,屏幕解锁。
我在哪里可以声明我的全局变量lockStatus,以便每次调用我的服务(BLEService)时都不会初始化它?
public class BLEService extends Service {
public static BLEService singleInstance;
private final static String logTag = BLEService.class.getSimpleName();
public int lockStatus = 2;
//// Section of Code of My Logic
if ((checksum_362 & 0x80) == 128) showAlert = true;
if (yAccel > 500 || yAccel < -500)
{
gMeasure = true;
lockStatus = 1; //lock done;
Intent intent = new Intent(this, ScreenLock.class);
startActivity(intent);
//delay for min 10 min
}
else
{
if (lockStatus == 1)
{
if (yAccel < 100 || yAccel > -100)
{
//UnLock
lockStatus = 2;
}
else
{
gMeasure = true;
lockStatus = 1; //lock done;
Intent intent = new Intent(this, ScreenLock.class);
startActivity(intent);
}
}
}
ChartActivity.singleInstance.newChartData(xAccel, yAccel, zAccel, showAlert, gMeasure);
GoogleDriveService.singleInstance.newLogData(xAccel, yAccel, zAccel, showAlert);
答案 0 :(得分:0)
您可以创建一个提供变量的单例并在应用程序中初始化它
public class MyApplication extends Application{
@Override
public void onCreate()
{
super.onCreate();
InitYourSingleton
}
}