ู…ูƒูˆู† ุฎุงุฑุฌูŠ ู„ู…ู†ุตุฉ Mobile 1C (BroadcastReceiver)

ุณูŠูƒูˆู† ูƒู„ ู…ุง ูŠู‚ุงู„ ููŠ ุงู„ู…ู‚ุงู„ ู…ุซูŠุฑุงู‹ ู„ู„ุงู‡ุชู…ุงู… ุญุตุฑูŠู‹ุง ู„ู…ุทูˆุฑูŠ 1C.

ุงู„ูŠูˆู… ุณูˆู ู†ู‚ูˆู… ุจุชุญู„ูŠู„ ุงู„ู…ูƒูˆู† ุงู„ุฎุงุฑุฌูŠ ู„ู€ "1C Mobile Application". ุธู‡ุฑ ู‡ุฐุง ุงู„ู…ู‚ุงู„ ู„ุณุจุจูŠู†. ุณู†ู‚ูˆู… ุจุชุทูˆูŠุฑ ูƒู„ ุดูŠุก ุชุญุช ู†ูุณ ATOL Smart.Lite

  1. ุชุจูŠู† ุฃู† ุชุทูˆูŠุฑ ุชุทุจูŠู‚ ุฃุตู„ูŠ ุฃูƒุซุฑ ุชุนู‚ูŠุฏู‹ุง ู…ู…ุง ูƒู†ุช ุฃุนุชู‚ุฏ ููŠ ุงู„ุจุฏุงูŠุฉ.
  2. ุชู… ุชู„ู‚ูŠ ุงู„ุนุฏูŠุฏ ู…ู† ุงู„ุทู„ุจุงุช ุนู„ู‰ ูˆุฌู‡ ุงู„ุชุญุฏูŠุฏ ู„ู„ู…ูƒูˆู† ุงู„ุฎุงุฑุฌูŠ ู„ 1 C

ู‚ุจู„ ุฐู„ูƒ ุŒ ูƒุงู† ู„ุฏูŠ ุจุงู„ูุนู„ ุฎุจุฑุฉ ููŠ ูƒุชุงุจุฉ ู…ูƒูˆู†ุงุช c++ ุงู„ุฎุงุฑุฌูŠุฉ. ูˆู‡ู†ุงูƒ ุญุชู‰ ู‚ุงู„ุจ ู„ู…ู†ุตุฉ x86. ูˆู‚ุฏ ูƒุชุจ ุฏูˆู† ุฃูŠ ูู‡ู… c++ . ูˆู…ุน ุฐู„ูƒ ุŒ ูู‡ูˆ ูŠุนู…ู„ ููŠ ู…ุดุฑูˆุนูŠู† ุŒ ูˆู„ุง ูŠุณู‚ุท. ู†ู†ุชู‚ู„ ุฅู„ู‰ ุฌูˆู‡ุฑ ุงู„ู…ุดูƒู„ุฉ. ุชุญุชุงุฌ ุฅู„ู‰ ู…ูƒูˆู† ุฃุตู„ูŠ ู„ุชู„ู‚ูŠ ุฑุณุงุฆู„ ุงู„ุจุซ ููŠ 1C. ุณู†ุฐู‡ุจ ุนุจุฑ ุงู„ุฅู†ุชุฑู†ุช ูˆู†ูู‡ู… ุฃู† ู‡ู†ุงูƒ ุญู„ูˆู„ ุฌุงู‡ุฒุฉ. ู„ูƒู†ู‡ู… ุฌู…ูŠุนู‹ุง ุนู„ู‰ ู…ูˆู‚ุนูŠ ุบูŠุฑ ุงู„ู…ูุถู„ ุŒ ุจุณุจุจ ุงู„ุฌุดุน ุงู„ู…ูุฑุท. ูˆุฃู†ุง ู„ุง ุฃุฑูŠุฏ ุฃู† ุฃุฏูุน ู„ู„ุตู†ุฏูˆู‚ ุงู„ุฃุณูˆุฏ. ูˆู…ุน ุฐู„ูƒ ุŒ ุธู‡ุฑุช ู…ู‚ุงู„ุฉ ู…ู…ุชุงุฒุฉ ุจุนู†ูˆุงู† "ุงู„ู…ูƒูˆู†ุงุช ุงู„ุฎุงุฑุฌูŠุฉ ู„ู…ู†ุตุฉ ุงู„ู…ุญู…ูˆู„ 1C ู„ู†ุธุงู… Android OS" . ูŠุตู ูƒูŠููŠุฉ ุชูƒูˆูŠู† ู†ุณุฎุฉ ู…ุญู…ูˆู„ุฉ ู…ู† ุฃุญุฏ ุงู„ู…ูƒูˆู†ุงุช ุŒ ูˆู…ุง ูŠุญุชุงุฌ ุฅู„ู‰ ุชุซุจูŠุชู‡. ูƒู…ุง ุฃูู‡ู…ู‡ุง ุŒ ููŠู…ุง ูŠู„ูŠ ุงู„ูƒูˆุฏ ุงู„ู…ุตุฏุฑูŠ ู„ู„ู…ู‚ุงู„ ุฃุนู„ุงู‡. ุดูƒุฑุง ุฌุฒูŠู„ุง ู„ู„ุฑุฌู„ ุงู„ูƒุฑูŠู… ู„ุฌู‡ูˆุฏู‡. ู„ู‚ุฏ ุณุงุนุฏุช ูƒุซูŠุฑุง ู…ุน ู…ุซุงู„ ุญูŠ ู„ูู‡ู… ู…ุงุฐุง ูˆูƒูŠู ูŠุนู…ู„. ุซู… ุงุถุทุฑุฑุช ุฅู„ู‰ ุชูˆุณูŠุน ุขูุงู‚ูŠ ู‚ู„ูŠู„ุงู‹ ูƒูŠู ูŠุนู…ู„ JNI. ุจุณูŠุทุฉ ูˆูˆุงุถุญุฉ ู‡ู†ุง ูˆู‡ู†ุง . ุฃูˆุตูŠ ุจุฃู† ุชุชุนุฑู ุนู„ูŠู‡ู…. ุฃู†ุง ู…ุชุฃูƒุฏ ู…ู† ุฃู† ู…ุจุฑู…ุฌูŠ c ++ ุงู„ุญู‚ูŠู‚ูŠูŠู† ู„ู† ูŠุนุฌุจู†ูŠ ุงู„ูƒูˆุฏ ุฃุทู„ุจ ู…ู†ูƒ ุฃู† ุชูƒูˆู† ู…ุชุณุงู…ุญู‹ุง ูˆุฃู† ุชูƒุชุณุญ ู…ุง ูŠู…ูƒู† ุชุญุณูŠู†ู‡ ูˆุงู„ูƒุชุงุจุฉ ุจุดูƒู„ ุตุญูŠุญ.

ู„ู†ุจุฏุฃ. ุฃุฎุฐุช ุดูุฑุฉ ุงู„ู…ุตุฏุฑ ู…ู† ุงู„ู…ุณุชูˆุฏุน ุงู„ุฐูŠ ุฃุดุฑุช ุฅู„ูŠู‡ ุณุงุจู‚ู‹ุง ุŒ ูˆุฃุนุฏุชู‡ ุจุงู„ูƒุงู…ู„ ุชู‚ุฑูŠุจู‹ุง ู„ุชู†ุงุณุจ ุงุญุชูŠุงุฌุงุชูŠ. ูŠู…ูƒู†ูƒ ุฃู† ุชุฃุฎุฐ ู‡ู†ุง . ุฏุนู†ุง ู†ุฐู‡ุจ ุงู„ู†ู‚ุงุท ุงู„ุฑุฆูŠุณูŠุฉ. ุงู„ุฅุฌุฑุงุก ุงู„ุฑุฆูŠุณูŠ ุจุงู„ู†ุณุจุฉ ู„ู†ุง ู‡ูˆ startEventsWatch ุŒ ุญูŠุซ ู†ุชุญู‚ู‚ ู…ู† ุฃู†ู‡ ู„ูŠุณ ู„ุฏูŠู†ุง BroadcastReceiver ู…ุชุตู„ ูˆุฅุนุงุฏุฉ ุชุนุฑูŠู ูˆุธูŠูุฉ onReceive ุญูŠุซ ู†ู†ุธุฑ ุฅู„ู‰ ู…ุง ุญุฏุซ ุฅู„ูŠู†ุง ุŒ ูˆู…ู„ุก ุงู„ุญู‚ูˆู„ ุŒ ูˆุงุณุชุฏุนุงุก ูˆุธูŠูุฉ OnBroadcastReceive ูˆุงู„ุขู† ู‡ูŠ ูˆุธูŠูุฉ ุงู„ุงุชุตุงู„ ุจูŠู† java ูˆ C + + ูˆูŠุฃุฎุฐู†ุง ู…ู† ุนุงู„ู… Android ุฅู„ู‰ ุนุงู„ู… 1C. ุงู„ู…ุฒูŠุฏ ุนู† ู‡ุฐุง ููŠ ูˆู‚ุช ู„ุงุญู‚. ุชุจุฏูˆ ุงู„ุฎุทูˆุท ุงู„ุนุฒูŠุฒุฉ ู„ู…ุง ู†ุฑูŠุฏ ุงู„ุญุตูˆู„ ุนู„ูŠู‡ ููŠ 1C ู‡ูƒุฐุง.

 filter.addAction("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"); filter.addAction(NEW_KEY_UP); 

ูู‡ูˆ ูŠุตู ุฃู†ู†ุง ู†ุชูˆู‚ุน ุญุฏุซู‹ุง ู…ู† ุงู„ู…ุงุณุญ ุงู„ุถูˆุฆูŠ. ููŠ ุญุงู„ุชูŠ ุŒ ู‡ุฐุง com.xcheng.scanner... ููŠ ุญุงู„ุชูƒ ุŒ ุงุนุชู…ุงุฏู‹ุง ุนู„ู‰ ุงู„ู…ุงุณุญ ุงู„ุถูˆุฆูŠ ุŒ ุณูŠูƒูˆู† ู‡ู†ุงูƒ ุฎุท ุขุฎุฑ. ูˆูู‚ู‹ุง ู„ุฐู„ูƒ ุŒ ุณุชูƒูˆู† ุงู„ุจูŠุงู†ุงุช ุงู„ู…ูˆุฌูˆุฏุฉ ุฏุงุฎู„ ุงู„ุฑุณุงู„ุฉ ู…ุฎุชู„ูุฉ ุฃูŠุถู‹ุง. ูˆูƒู‚ุงุนุฏุฉ ุนุงู…ุฉ ุŒ ูŠู…ูƒู† ุงู„ุญุตูˆู„ ุนู„ู‰ ู‡ุฐู‡ ุงู„ุจูŠุงู†ุงุช ู…ู† ุงู„ุดุฑูƒุฉ ุงู„ู…ุตู†ุนุฉ ู„ู€ TSD. ุญุณู†ุง ุŒ ุฃูˆ ุฅู„ู‚ุงุก ู†ุธุฑุฉ ุนู„ู‰ logcat. ูƒู†ุช ุฃุฑุบุจ ุฃูŠุถู‹ุง ููŠ ุชู„ู‚ูŠ ุฑู…ูˆุฒ ุงุถุบุท ุนู„ู‰ ุฒุฑ ุงู„ุฃุฌู‡ุฒุฉ. ู„ูƒู† ุงู„ู…ุดูƒู„ุฉ ู„ู… ุชุญู„ ููŠ ุงู„ุฌุจู‡ุฉ. ุฅู† ุฅุถุงูุฉ onKeyUP ุฅู„ู‰ ุงู„ูƒูˆุฏ ูˆุฅุฑุณุงู„ู‡ ุฅู„ู‰ sendBroadcast ู„ู… ูŠู†ุฌุญ. ู„ูŠุณ ู…ู† ุงู„ู…ุณุชุบุฑุจ ุŒ ู†ุดุงุทู†ุง ู„ูŠุณ ููŠ ุงู„ู…ู‚ุฏู…ุฉ. ู„ู‡ุฐุง ุงู„ุณุจุจ ุŒ ุงุถุทุฑุฑุช ุฅู„ู‰ ุฑู…ูŠ AccessibilityService ุจุณุฑุนุฉ

startEventsWatch
  public void startEventsWatch() { if (m_Receiver==null) { m_Receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String event, type, data; switch (intent.getAction()) { case "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST": event = "NewBarcode"; type = intent.getStringExtra("EXTRA_BARCODE_DECODING_SYMBOLE"); data = intent.getStringExtra("EXTRA_BARCODE_DECODING_DATA"); OnBroadcastReceive(m_V8Object, event, type, data); break; case NEW_KEY_UP: event = "NewKeyUP"; type = "key"; data = intent.getStringExtra(KEY_CODE); OnBroadcastReceive(m_V8Object, event, type, data); } } } }; IntentFilter filter = new IntentFilter(); filter.addAction("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"); filter.addAction(NEW_KEY_UP); m_Activity.registerReceiver(m_Receiver, filter); } } 


ุนุงุฏ ุงู„ุขู† ุฅู„ู‰ ุฅุฑุณุงู„ ุงู„ุจูŠุงู†ุงุช ู„ุฏูŠู†ุง ููŠ 1C. ุชู‚ูˆู… OnBroadcastReceive ุจุงุณุชุฏุนุงุก extern "C" JNIEXPORT void JNICALL Java_org_innovait_atolsmartliteutils_MainApp_OnBroadcastReceive(JNIEnv* env, jclass jClass, jlong pObject, jstring j_event, jstring j_type, jstring j_data) jstring j_event, jstring j_type, jstring j_data ู‡ุฐู‡ ู‡ูŠ ุงู„ู…ุชุบูŠุฑุงุช ุงู„ุชูŠ ุฃู‚ูˆู… jstring j_event, jstring j_type, jstring j_data ุŒ ุงู„ุญุฏุซ ุŒ ู†ูˆุน CC ุŒ ูˆ CC ู†ูุณู‡ุง. ู‚ุฏ ูŠูƒูˆู† ู‡ู†ุงูƒ ุจูŠุงู†ุงุช ุฃุฎุฑู‰.

Java_org_innovait_atolsmartliteutils_MainApp_OnBroadcastReceive
 extern "C" JNIEXPORT void JNICALL Java_org_innovait_atolsmartliteutils_MainApp_OnBroadcastReceive(JNIEnv* env, jclass jClass, jlong pObject, jstring j_event, jstring j_type, jstring j_data) { IAddInDefBaseEx *pAddIn = (IAddInDefBaseEx *) pObject; if (pAddIn != nullptr) { std::wstring ws_event =ToWStringJni(j_event); std::wstring ws_type = ToWStringJni(j_type); std::wstring ws_data = ToWStringJni(j_data); std::wstring obj_data{}; obj_data = L"{\"type\": \"" + ws_type + L"\", \"data\": \"" + ws_data + L"\"}"; WcharWrapper wdata((wchar_t*)obj_data.c_str()); WcharWrapper wmsg((wchar_t*)ws_event.c_str()); pAddIn->ExternalEvent(s_EventSource, wmsg, wdata); } } 


std::wstring ws_event =ToWStringJni(j_event); ุจุงุณุชุฎุฏุงู… ู‡ุฐุง ุŒ ู†ุชุฑุฌู… ุงู„ุณู„ุณู„ุฉ ู…ู† jstring ุฅู„ู‰ std::wstring ุŒ ูˆู…ู† ุซู… ู†ู‚ูˆู… WcharWrapper wmsg((wchar_t*)ws_event.c_str()); ุฃุฌู„ 1C WcharWrapper wmsg((wchar_t*)ws_event.c_str());

ุดูƒุฑุง ู„ู„ุดุฎุต ุงู„ุฐูƒูŠ ู„ูˆุธูŠูุฉ ุงู„ุชุญูˆูŠู„. ุงู„ูˆุธูŠูุฉ ุงู„ุซุงู†ูŠุฉ ุชุฃุชูŠ ู…ู† ุงู„ู…ุฑุจุน ููŠ ุงู„ู…ุซุงู„ ู…ู† 1C.

ุงู„ู…ูุณุฏ ุงู„ุนู†ูˆุงู†
 std::wstring ToWStringJni(jstring jstr) { std::wstring ret; if (jstr) { JNIEnv* env = getJniEnv(); const jchar* jChars = env->GetStringChars(jstr, NULL); jsize jLen = env->GetStringLength(jstr); ret.assign(jChars, jChars + jLen); env->ReleaseStringChars(jstr, jChars); } return ret; } 


ุจุงู„ู†ุณุจุฉ ู„ุฃูˆู„ุฆูƒ ุงู„ุฐูŠู† ู„ุง ูŠุฑูŠุฏูˆู† ุชุซุจูŠุช ูƒู„ ุดูŠุก ูˆุชุฌู…ูŠุนู‡ ุจุฃู†ูุณู‡ู…. ูˆู‡ู†ุง ุงู„ุฅุตุฏุงุฑุงุช ุงู„ู†ู‡ุงุฆูŠุฉ.


ู‡ุฐุง ูƒู„ ุดูŠุก. ููŠ ุงู†ุชุธุงุฑ ุงู„ุชุนู„ูŠู‚ุงุช.

Source: https://habr.com/ru/post/ar479132/


All Articles