diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9fe181b..f3137e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -116,8 +116,6 @@
android:screenOrientation="landscape"
android:theme="@style/Theme.BigImageActivity" />
-
-
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9fe181b..f3137e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -116,8 +116,6 @@
android:screenOrientation="landscape"
android:theme="@style/Theme.BigImageActivity" />
-
-
diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp
index 2760c55..8bd63a4 100644
--- a/app/src/main/cpp/yolo.cpp
+++ b/app/src/main/cpp/yolo.cpp
@@ -812,17 +812,17 @@
javaVM->AttachCurrentThread(&env, nullptr);
jclass callback_clazz = env->GetObjectClass(j_callback);
- jmethodID j_method_id = env->GetMethodID(
- callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
- );
-
//获取ArrayList类
jclass list_clazz = env->FindClass("java/util/ArrayList");
jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V");
jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z");
//初始化ArrayList对象
jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init);
- if (j_mode == 1) {
+ if (j_mode == 0) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onFreeDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
auto rect = item.rect;
@@ -842,6 +842,10 @@
//回调
env->CallVoidMethod(j_callback, j_method_id, arraylist_obj);
} else if (j_mode == 1) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
char index[16];
sprintf(index, "%d", item.label);
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9fe181b..f3137e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -116,8 +116,6 @@
android:screenOrientation="landscape"
android:theme="@style/Theme.BigImageActivity" />
-
-
diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp
index 2760c55..8bd63a4 100644
--- a/app/src/main/cpp/yolo.cpp
+++ b/app/src/main/cpp/yolo.cpp
@@ -812,17 +812,17 @@
javaVM->AttachCurrentThread(&env, nullptr);
jclass callback_clazz = env->GetObjectClass(j_callback);
- jmethodID j_method_id = env->GetMethodID(
- callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
- );
-
//获取ArrayList类
jclass list_clazz = env->FindClass("java/util/ArrayList");
jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V");
jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z");
//初始化ArrayList对象
jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init);
- if (j_mode == 1) {
+ if (j_mode == 0) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onFreeDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
auto rect = item.rect;
@@ -842,6 +842,10 @@
//回调
env->CallVoidMethod(j_callback, j_method_id, arraylist_obj);
} else if (j_mode == 1) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
char index[16];
sprintf(index, "%d", item.label);
diff --git a/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt b/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt
deleted file mode 100644
index 308c287..0000000
--- a/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.casic.br.ar.app.service
-
-import android.app.Service
-import android.content.Intent
-import android.os.IBinder
-import android.provider.Settings
-import android.util.Log
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.LifecycleRegistry
-import androidx.lifecycle.lifecycleScope
-import com.casic.br.ar.app.utils.LocaleConstant
-import com.casic.br.ar.app.view.MainActivity
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import okhttp3.OkHttpClient
-import okhttp3.Request
-import okhttp3.Response
-import okhttp3.WebSocket
-import okhttp3.WebSocketListener
-import java.util.concurrent.TimeUnit
-
-
-class WebSocketMessageService : Service(), LifecycleOwner {
-
- private val kTag = "WebSocketMessageService"
- private val registry = LifecycleRegistry(this)
-
- override fun getLifecycle(): Lifecycle {
- return registry
- }
-
- private var webSocket: WebSocket? = null
-
- override fun onCreate() {
- super.onCreate()
- Log.d(kTag, "onCreate: WebSocketMessageService")
- //初始化WebSocket
- val httpClient = OkHttpClient.Builder()
- .connectTimeout(10, TimeUnit.SECONDS)
- .readTimeout(10, TimeUnit.SECONDS)
- .writeTimeout(10, TimeUnit.SECONDS)
- .build()
- val deviceId = Settings.System.getString(contentResolver, Settings.Secure.ANDROID_ID)
- lifecycleScope.launch(Dispatchers.IO) {
- val request = Request.Builder()
- .url("ws://${LocaleConstant.BASE_IP}/websocket/${deviceId}")
- .build()
- httpClient.newWebSocket(request, object : WebSocketListener() {
- override fun onOpen(webSocket: WebSocket, response: Response) {
- super.onOpen(webSocket, response)
- this@WebSocketMessageService.webSocket = webSocket
- lifecycleScope.launch(Dispatchers.Main) {
- MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
- }
- }
-
- override fun onMessage(webSocket: WebSocket, text: String) {
- super.onMessage(webSocket, text)
- lifecycleScope.launch(Dispatchers.Main) {
- val message = MainActivity.weakReferenceHandler.obtainMessage()
- message.what = LocaleConstant.WEBSOCKET_MESSAGE_CODE
- message.obj = text
- MainActivity.weakReferenceHandler.sendMessage(message)
- }
- }
-
- override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
- super.onFailure(webSocket, t, response)
- lifecycleScope.launch(Dispatchers.Main) {
- MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
- }
- }
- })
- httpClient.dispatcher.executorService.shutdown()
- }
- }
-
- override fun onDestroy() {
- super.onDestroy()
- webSocket?.close(1000, null)
- Log.d(kTag, "onDestroy: WebSocketMessageService")
- }
-
- override fun onBind(intent: Intent?): IBinder? {
- return null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9fe181b..f3137e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -116,8 +116,6 @@
android:screenOrientation="landscape"
android:theme="@style/Theme.BigImageActivity" />
-
-
diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp
index 2760c55..8bd63a4 100644
--- a/app/src/main/cpp/yolo.cpp
+++ b/app/src/main/cpp/yolo.cpp
@@ -812,17 +812,17 @@
javaVM->AttachCurrentThread(&env, nullptr);
jclass callback_clazz = env->GetObjectClass(j_callback);
- jmethodID j_method_id = env->GetMethodID(
- callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
- );
-
//获取ArrayList类
jclass list_clazz = env->FindClass("java/util/ArrayList");
jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V");
jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z");
//初始化ArrayList对象
jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init);
- if (j_mode == 1) {
+ if (j_mode == 0) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onFreeDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
auto rect = item.rect;
@@ -842,6 +842,10 @@
//回调
env->CallVoidMethod(j_callback, j_method_id, arraylist_obj);
} else if (j_mode == 1) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
char index[16];
sprintf(index, "%d", item.label);
diff --git a/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt b/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt
deleted file mode 100644
index 308c287..0000000
--- a/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.casic.br.ar.app.service
-
-import android.app.Service
-import android.content.Intent
-import android.os.IBinder
-import android.provider.Settings
-import android.util.Log
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.LifecycleRegistry
-import androidx.lifecycle.lifecycleScope
-import com.casic.br.ar.app.utils.LocaleConstant
-import com.casic.br.ar.app.view.MainActivity
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import okhttp3.OkHttpClient
-import okhttp3.Request
-import okhttp3.Response
-import okhttp3.WebSocket
-import okhttp3.WebSocketListener
-import java.util.concurrent.TimeUnit
-
-
-class WebSocketMessageService : Service(), LifecycleOwner {
-
- private val kTag = "WebSocketMessageService"
- private val registry = LifecycleRegistry(this)
-
- override fun getLifecycle(): Lifecycle {
- return registry
- }
-
- private var webSocket: WebSocket? = null
-
- override fun onCreate() {
- super.onCreate()
- Log.d(kTag, "onCreate: WebSocketMessageService")
- //初始化WebSocket
- val httpClient = OkHttpClient.Builder()
- .connectTimeout(10, TimeUnit.SECONDS)
- .readTimeout(10, TimeUnit.SECONDS)
- .writeTimeout(10, TimeUnit.SECONDS)
- .build()
- val deviceId = Settings.System.getString(contentResolver, Settings.Secure.ANDROID_ID)
- lifecycleScope.launch(Dispatchers.IO) {
- val request = Request.Builder()
- .url("ws://${LocaleConstant.BASE_IP}/websocket/${deviceId}")
- .build()
- httpClient.newWebSocket(request, object : WebSocketListener() {
- override fun onOpen(webSocket: WebSocket, response: Response) {
- super.onOpen(webSocket, response)
- this@WebSocketMessageService.webSocket = webSocket
- lifecycleScope.launch(Dispatchers.Main) {
- MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
- }
- }
-
- override fun onMessage(webSocket: WebSocket, text: String) {
- super.onMessage(webSocket, text)
- lifecycleScope.launch(Dispatchers.Main) {
- val message = MainActivity.weakReferenceHandler.obtainMessage()
- message.what = LocaleConstant.WEBSOCKET_MESSAGE_CODE
- message.obj = text
- MainActivity.weakReferenceHandler.sendMessage(message)
- }
- }
-
- override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
- super.onFailure(webSocket, t, response)
- lifecycleScope.launch(Dispatchers.Main) {
- MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
- }
- }
- })
- httpClient.dispatcher.executorService.shutdown()
- }
- }
-
- override fun onDestroy() {
- super.onDestroy()
- webSocket?.close(1000, null)
- Log.d(kTag, "onDestroy: WebSocketMessageService")
- }
-
- override fun onBind(intent: Intent?): IBinder? {
- return null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt
index 2bae0ca..915bc7f 100644
--- a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt
@@ -138,9 +138,6 @@
* */
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 5
- const val WEBSOCKET_CONNECTED_CODE = 100
- const val WEBSOCKET_MESSAGE_CODE = 101
- const val WEBSOCKET_DISCONNECTED_CODE = 102
/**
* =============================================================================================
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9fe181b..f3137e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -116,8 +116,6 @@
android:screenOrientation="landscape"
android:theme="@style/Theme.BigImageActivity" />
-
-
diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp
index 2760c55..8bd63a4 100644
--- a/app/src/main/cpp/yolo.cpp
+++ b/app/src/main/cpp/yolo.cpp
@@ -812,17 +812,17 @@
javaVM->AttachCurrentThread(&env, nullptr);
jclass callback_clazz = env->GetObjectClass(j_callback);
- jmethodID j_method_id = env->GetMethodID(
- callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
- );
-
//获取ArrayList类
jclass list_clazz = env->FindClass("java/util/ArrayList");
jmethodID arraylist_init = env->GetMethodID(list_clazz, "", "()V");
jmethodID arraylist_add = env->GetMethodID(list_clazz, "add", "(Ljava/lang/Object;)Z");
//初始化ArrayList对象
jobject arraylist_obj = env->NewObject(list_clazz, arraylist_init);
- if (j_mode == 1) {
+ if (j_mode == 0) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onFreeDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
auto rect = item.rect;
@@ -842,6 +842,10 @@
//回调
env->CallVoidMethod(j_callback, j_method_id, arraylist_obj);
} else if (j_mode == 1) {
+ jmethodID j_method_id = env->GetMethodID(
+ callback_clazz, "onDetect", "(Ljava/util/ArrayList;)V"
+ );
+
for (const auto &item: objects) {
char index[16];
sprintf(index, "%d", item.label);
diff --git a/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt b/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt
deleted file mode 100644
index 308c287..0000000
--- a/app/src/main/java/com/casic/br/ar/app/service/WebSocketMessageService.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.casic.br.ar.app.service
-
-import android.app.Service
-import android.content.Intent
-import android.os.IBinder
-import android.provider.Settings
-import android.util.Log
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.LifecycleRegistry
-import androidx.lifecycle.lifecycleScope
-import com.casic.br.ar.app.utils.LocaleConstant
-import com.casic.br.ar.app.view.MainActivity
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import okhttp3.OkHttpClient
-import okhttp3.Request
-import okhttp3.Response
-import okhttp3.WebSocket
-import okhttp3.WebSocketListener
-import java.util.concurrent.TimeUnit
-
-
-class WebSocketMessageService : Service(), LifecycleOwner {
-
- private val kTag = "WebSocketMessageService"
- private val registry = LifecycleRegistry(this)
-
- override fun getLifecycle(): Lifecycle {
- return registry
- }
-
- private var webSocket: WebSocket? = null
-
- override fun onCreate() {
- super.onCreate()
- Log.d(kTag, "onCreate: WebSocketMessageService")
- //初始化WebSocket
- val httpClient = OkHttpClient.Builder()
- .connectTimeout(10, TimeUnit.SECONDS)
- .readTimeout(10, TimeUnit.SECONDS)
- .writeTimeout(10, TimeUnit.SECONDS)
- .build()
- val deviceId = Settings.System.getString(contentResolver, Settings.Secure.ANDROID_ID)
- lifecycleScope.launch(Dispatchers.IO) {
- val request = Request.Builder()
- .url("ws://${LocaleConstant.BASE_IP}/websocket/${deviceId}")
- .build()
- httpClient.newWebSocket(request, object : WebSocketListener() {
- override fun onOpen(webSocket: WebSocket, response: Response) {
- super.onOpen(webSocket, response)
- this@WebSocketMessageService.webSocket = webSocket
- lifecycleScope.launch(Dispatchers.Main) {
- MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_CONNECTED_CODE)
- }
- }
-
- override fun onMessage(webSocket: WebSocket, text: String) {
- super.onMessage(webSocket, text)
- lifecycleScope.launch(Dispatchers.Main) {
- val message = MainActivity.weakReferenceHandler.obtainMessage()
- message.what = LocaleConstant.WEBSOCKET_MESSAGE_CODE
- message.obj = text
- MainActivity.weakReferenceHandler.sendMessage(message)
- }
- }
-
- override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
- super.onFailure(webSocket, t, response)
- lifecycleScope.launch(Dispatchers.Main) {
- MainActivity.weakReferenceHandler.sendEmptyMessage(LocaleConstant.WEBSOCKET_DISCONNECTED_CODE)
- }
- }
- })
- httpClient.dispatcher.executorService.shutdown()
- }
- }
-
- override fun onDestroy() {
- super.onDestroy()
- webSocket?.close(1000, null)
- Log.d(kTag, "onDestroy: WebSocketMessageService")
- }
-
- override fun onBind(intent: Intent?): IBinder? {
- return null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt
index 2bae0ca..915bc7f 100644
--- a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt
@@ -138,9 +138,6 @@
* */
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 5
- const val WEBSOCKET_CONNECTED_CODE = 100
- const val WEBSOCKET_MESSAGE_CODE = 101
- const val WEBSOCKET_DISCONNECTED_CODE = 102
/**
* =============================================================================================
diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
index 70c9287..b9e6477 100644
--- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt
@@ -1,53 +1,29 @@
package com.casic.br.ar.app.view
-import android.content.Intent
import android.graphics.Typeface
import android.os.Bundle
-import android.os.Handler
-import android.os.Message
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import com.casic.br.ar.app.R
import com.casic.br.ar.app.databinding.ActivityMainBinding
import com.casic.br.ar.app.external.Yolov8ncnn
-import com.casic.br.ar.app.service.WebSocketMessageService
-import com.casic.br.ar.app.utils.LocaleConstant
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
import com.pengxh.kt.lite.extensions.dp2px
import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.WeakReferenceHandler
import org.opencv.android.OpenCVLoader
-class MainActivity : KotlinBaseActivity(), Handler.Callback {
-
- companion object {
- lateinit var weakReferenceHandler: WeakReferenceHandler
- }
+class MainActivity : KotlinBaseActivity() {
private val kTag = "MainActivity"
private val yolov8ncnn by lazy { Yolov8ncnn() }
private val marginOffset by lazy { 25.dp2px(this) }
private lateinit var itemAdapter: NormalRecyclerAdapter
- override fun handleMessage(msg: Message): Boolean {
- when (msg.what) {
- LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this)
-
- LocaleConstant.WEBSOCKET_MESSAGE_CODE -> {
- (msg.obj as String).show(this)
- }
-
- LocaleConstant.WEBSOCKET_DISCONNECTED_CODE -> "WebSocket连接失败".show(this)
- }
- return true
- }
-
override fun initEvent() {
itemAdapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
@@ -62,11 +38,8 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(this)
//初始化OpenCV
OpenCVLoader.initLocal()
- //算法服务
- startService(Intent(this, WebSocketMessageService::class.java))
itemAdapter = object : NormalRecyclerAdapter(
R.layout.item_main_rv_l, arrayListOf("开始检查", "检查记录", "知识库")