如何在Xamarin.Forms中使用服务。错误检查服务是否已在AndroidManifest中注册

时间:2019-04-12 08:37:21

标签: android xamarin.forms jar binding android-manifest

我是Xamarin的初学者,我正在尝试开发自己的第一个Android应用。 我必须使用第三方SDK通过蓝牙连接并从条形码扫描仪接收数据。 我创建了一个新的Xamarin.Forms项目和一个新的Library binding android项目。 我按照本教程(https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar/)导入了第三方jar 我遵循了SDK的文档不足,但是当我调用应搜索蓝牙设备的函数时,出现此错误:

{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:\ProgettiVS\TestJar\PosunitechScanner\obj\Debug\generated\src\Com.Bim.Bluetooth.Manager.cs:248 
  at TestJar.Droid.MainActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x00031] in C:\ProgettiVS\TestJar\TestJar\TestJar.Android\MainActivity.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 个答案:

答案 0 :(得分: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.
 }

您可以共享您的测试项目,从而可以更快地发现错误