我正在研究android中的gps跟踪应用程序.这是我的代码架构:
BackgroundSyncService在一个时间间隔内检查我是否正在运行.如果它停止然后它开始.BackgroundSyncService在一个时间间隔内检查我是否正在运行.如果它停止然后它开始.BackgroundSyncService在一个时间间隔内检查我是否正在运行.如果停止,则启动.在我的BackgroundSyncService服务中,我使用以下方式初始化GoogleApiClient:
public void setLocationLocationRequest() {
try {
googleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).addApi(com.google.android.gms.location.LocationServices.API).build();
locationRequest = new LocationRequest();
locationRequest.setInterval(3000);
locationRequest.setFastestInterval(3000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
googleApiClient.connect();
} catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
这里是accuricy LocationRequest.PRIORITY_HIGH_ACCURACY和间隔
locationRequest.setInterval(3000)
Run Code Online (Sandbox Code Playgroud)
这是GoogleApiClient实现代码.
此应用程序GPS信息部分包含纬度经度和精度参数
我的发现:在onLocationChanged(Location location)方法中我用这种方式检查Location对象的准确性:location.getAccuracy().如果精度小于50米,那么我接受它.
在85%的情况下,它像魅力一样工作.它向我发送GPS的确切位置.但在15%的情况下,它给我发送了不准确的位置,如超过300米.
15%的设备是低成本的中国品牌手机.
我的问题:
在此先感谢此主题.并且抱歉英语不好.
我正在我的应用程序中实现FCM(Firebase消息服务).这里似乎都没问题,除非app处于后台状态我无法提取预期的通知数据.
基于概念:FCM中有两种类型的消息:
display-messages:这些消息仅在您的应用处于前台时才有效.
数据消息:即使您的应用处于后台,这些消息也能正常工作当我们的应用处于后台时,Android会将通知消息定向到系统托盘.
处理数据消息时,您的通知应具有click_action ="YOUR_ACTION"字段.
我的信息会是这样的:
{
"data": {
"body": "here is body",
"title": "Title",
"click_action": "YOUR_ACTION"
},
"to": "ffEseX6vwcM:APA91bF8m7wOF MY FCM ID 07j1aPUb"
}
Run Code Online (Sandbox Code Playgroud)
活动将显示清单文件将如下所示的消息:
<activity
android:name=".NotificationActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Dialog"
android:windowSoftInputMode="stateHidden" >
<intent-filter>
<action android:name="YOUR_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
点击通知后,它将重定向到我的NotificationActivity.在我的NotificationActivityin onCreate和onNewIntent方法中,我使用这种方式提取消息:
Bundle bundle=getIntent().getExtras();
if(bundle!=null) {
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
Log.d("DATA_SENT", String.format("%s %s (%s)", key,
value.toString(), value.getClass().getName()));
}
} …Run Code Online (Sandbox Code Playgroud) Mifare Classic 1K的程序是
我已经完成了这些程序,并且还从特定部门读取和写入数据.
标签的轮询命令是
new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x04, (byte) 0xD4, (byte) 0x4A,
(byte) 0x01, (byte) 0x00 }
Run Code Online (Sandbox Code Playgroud)
验证命令是
new byte[] { (byte) 0xFF, (byte) 0x86, (byte) 0x00,
(byte) 0x00, (byte) 0x05, (byte) 0x01,(byte) 0x00, (byte) 0x04,
(byte) 0x60,(byte) 0x00 };
Run Code Online (Sandbox Code Playgroud)
这里"(字节)0x01"是扇区1
并且在扇区1上写入,块5是
new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,(byte) 0x00, (byte) 0x15, (byte) 0xD4,
(byte) 0x40,(byte) 0x01, (byte) 0xA0, (byte) 0x05,(byte) 0x01, …Run Code Online (Sandbox Code Playgroud) 在我的 application.yml 文件中,我添加了 8080 上的服务器端口。
server:
port: 8080
Run Code Online (Sandbox Code Playgroud)
现在在我的 Dockerfile 中,我公开了端口范围8080-8089。我的目标是在不同的外部和内部端口上运行此映像。
我的 Dockerfile 如下
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} user-service.jar
EXPOSE 8000-8089
ENTRYPOINT ["java","-jar","/user-service.jar"]
Run Code Online (Sandbox Code Playgroud)
我的 docker 镜像构建命令如下:
docker image build -t user-service .
Run Code Online (Sandbox Code Playgroud)
现在构建此映像后,我的 docker run 命令如下:
docker run -d -p 8080:8080 -it user-service
Run Code Online (Sandbox Code Playgroud)
这里,user-service是我的 docker 镜像 TAG。之后,我可以在 8080 端口上访问该应用程序。
但问题是,当我使用端口映射 -p 8081:8081 运行另一个容器时,应用程序正在运行,但无法使用端口 8081 进行访问。
我的 docker 运行命令是:
docker run -d -p 8081:8081 -it user-service
Run Code Online (Sandbox Code Playgroud)
现在我的目标是我想用 docker 中的外部和内部端口映射跳过 application.yml 服务器端口
注意事项:
我的问题如下.伪代码如下:
public Object rollBackTestMainMethod(List<Object> list) {
List<Object> responseList = new ArrayList<>();
for(Object item:list){
try{
Boolean isOperationSuccess = rollBackTestSubMethod(item);
if (isOperationSuccess==null || !isOperationSuccess){
item.addError("Operation failed");
item.addSuccess(false);
} else {
item.addError(null);
item.addSuccess(true);
}
} catch(Exception exception) {
item.addError(exception.getMessage());
item.addSuccess(false);
}
responseList.add(item);
}
return responseList;
}
@Transactional(rollbackFor = {Exception.class, SQLException.class})
private Boolean rollBackTestSubMethod(Object listItem){
Long value1=save(listItem.getValue1());
if(value1==null){
throw new Exception("Error during save 1");
}
Long value2=save(listItem.getValue2());
if(value2==null){
throw new Exception("Error during save 2");
}
Long value3=save(listItem.getValue3());
if(value3==null){
throw new Exception("Error during …Run Code Online (Sandbox Code Playgroud) android ×2
java ×2
spring-boot ×2
docker ×1
docker-run ×1
dockerfile ×1
firebase ×1
gps ×1
hibernate ×1
mifare ×1
nfc ×1
rfid ×1
spring ×1
tracking ×1