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("开始检查", "检查记录", "知识库")