#android #xamarin.forms #jar #binding #android-manifest
#Android #xamarin.forms #jar #привязка #android-манифест
Вопрос:
Я новичок в Xamarin и пытаюсь разработать свое первое приложение для Android. Я должен использовать сторонний SDK для подключения и получения данных со сканера штрих-кода через Bluetooth. Я создал новый Xamarin.Проект Forms и новая библиотека, привязывающая проект Android. Я следовал этому руководству (https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar / ) чтобы импортировать сторонний jar, я следовал плохой документации для SDK, но когда я вызываю функцию, которая должна искать устройства Bluetooth, я получаю эту ошибку:
{Java.Lang.IllegalStateException: Check whether the service is registered in the AndroidManifest
at Java.Interop.JniEnvironment InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <286213b9e14c442ba8d8d94cc9dbec8e>:0
at Android.Runtime.JNIEnv.CallVoidMethod (System.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue* parms) [0x0000e] in <b781ed64f1d743e7881ac038e0fbdf85>:0
at Com.Bim.Bluetooth.Manager.SearchScanner (Com.Bim.Interfaces.IOnSearchCallback onSearchCallback) [0x0005c] in C:ProgettiVSTestJarPosunitechScannerobjDebuggeneratedsrcCom.Bim.Bluetooth.Manager.cs:248
at TestJar.Droid.MainActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x00031] in C:ProgettiVSTestJarTestJarTestJar.AndroidMainActivity.cs:43
--- End of managed Java.Lang.IllegalStateException stack trace ---
java.lang.IllegalStateException: Check whether the service is registered in the AndroidManifest
at com.bim.bluetooth.Manager.checkBinder(Manager.java:117)
at com.bim.bluetooth.Manager.searchScanner(Manager.java:46)
at md59d3085c099eda7a3b5de2c6cfaef6eaa.MainActivity.n_onCreate(Native Method)
at md59d3085c099eda7a3b5de2c6cfaef6eaa.MainActivity.onCreate(MainActivity.java:29)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2899)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3054)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1814)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:280)
at android.app.ActivityThread.main(ActivityThread.java:6706)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
}
Это мой манифест, как предложено в документации, я добавил разрешения и включил службу.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.TestJar.Android">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
<application android:label="TestJar.Android">
<service
android:name="com.bim.bluetooth.BluetoothService"
android:enabled="true" />
</application>
</manifest>
Связана ли ошибка с com.bim.bluetooth.Служба BluetoothService?
Правильно ли я зарегистрировал службу?
У меня есть тестовый проект, если вы хотите его увидеть, просто спросите меня.
Заранее благодарю
Ответ №1:
Xamarin.Службы Android должны подчиняться двум нерушимым правилам служб Android:
- Они должны расширить Android.App.Service.
- Они должны быть оформлены атрибутом Android.App.ServiceAttribute .
Другим требованием служб Android является то, что они должны быть зарегистрированы в AndroidManifest.xml и получил уникальное имя. Xamarin.Android автоматически зарегистрирует службу в манифесте во время сборки с необходимым атрибутом XML.
Этот фрагмент кода является простейшим примером создания службы в Xamarin.Android, отвечающий этим двум требованиям:
[Service]
public class DemoService : Service
{
// Magical code that makes the service do wonderful things.
}
и вы могли бы поделиться своим тестовым проектом, который мог бы быстрее находить ошибки
Комментарии:
1. Я не внедряю службу, я просто пытаюсь ее использовать.