2016-05-19 23 views
0

私の問題は、サービスからの.jarライブラリ内のロジックを持つBLEデバイスに接続することです(別のプロセスとして実行されます)。現在、私は次のエラーに直面しています。 LogCatメッセージ:AndroidはサービスからBLEデバイスに接続します(起動時に起動します)

05-19 17:46:45.107 14191-14203/com.<name>.rnd.erservice E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.) 
                    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
                     at android.os.Handler.<init>(Handler.java:200) 
                     at android.os.Handler.<init>(Handler.java:114) 
                     at com.slsi.<name>.<name>.<init>(<name>.java:94) 
                     at com.<name>.rnd.erservice.device.<name>.<init>(<name>.java:28) 
                     at com.<name>.rnd.erservice.AppService$2.connectToDevices(AppService.java:184) 
                     at com.<name>.rnd.servicelibrary.IRemoteProductService$Stub.onTransact(IRemoteProductService.java:67) 
                     at android.os.Binder.execTransact(Binder.java:461) 

私がUIスレッドからまたはハンドラとスレッドからこの接続を開始する必要があるようですが、アプリケーションとリモートサービス間の直接接続があってはならない(APIの種類がサービスに呼び出し、結果を得ます)。ありがとう

答えて

0

これはおそらくBLEとは関係ありません。どのスレッドからでもGATT操作を行うことができます。ライブラリがルーパを持つスレッドで実行される必要があるがメインスレッドで実行したくない場合は、おそらくLooper.prepare()を実行する新しいスレッドを作成してライブラリを呼び出し、完了したらライブラリからのイベントを処理するためにLooper.loop()を呼び出します。

+0

お返事ありがとうございます。ここに私が試したことがあります: 'if(Looper.myLooper()== null){ Looper.prepare(); } ハンドラ=新しいハンドラ(); 実行可能タスク=新しいRunnable()@Override public void run(){ //ここでいくつかの作業を行います。 新しいスレッド(タスク).start(); Looper.loop(); ' それでも動作しません。申し訳ありませんが、私は何かが本当にシンプルに欠けている、私はAndroidの新しいです –

+0

ルーパーのものは内のスレッドで行う必要があります。 – Emil

+0

これは役に立ちません。 –

関連する問題