3

私たちは、サービスを使用した Android プログラミングに非常に慣れていません。1 つのアプリでサービスを実行することができました。現在、サービスを開始した 1 つの所有者アプリ「AppA」と、サービスを使用したい別のアプリ「AppB」があります。では、このアプリ「AppB」を同じ実行中のサービスにバインドするにはどうすればよいでしょうか? サービスの複数のインスタンスを作成する必要がありますか (これは可能ですか?)、または複数のアプリをサービスの同じインスタンスにバインドできますか?

アクティビティをサービスにバインドするために、initservice() という関数を作成しました。

initService() 内の所有者アプリ A のコード:

connection = new SampleServiceConnection();
Intent i = new Intent();
i.setClassName("com.example.basicstuff",com.example.basicstuff.SampleService.class.getName());
this.startService(i);
boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
Log.d(TAG, "initService() bound with " + ret);

SampleServiceConnection クラスは、Andorid の ServiceConnection クラスを実装したクラスです。私はすでに onServiceConnected() および onServiceDisconnected() 関数を実装しています。私の最初の所有者アプリである「AppA」はパッケージ com.example.basicstuff であり、Service クラスを拡張するクラスは SampleService です。bindService() 関数を実行した後、LogCat は「initService() bound with true」を表示します。

ISampleService という .aidl ファイルも作成しました。

initService() 内のアプリ B のコード

connection = new SampleServiceConnection();
Intent i = new Intent("com.example.GameBook_Chat.ISampleService");
System.out.println(this.startService(i));
System.out.println("service running");
boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
Log.d(TAG, "initService() bound with " + ret);

私の 2 番目のパッケージ名は com.example.GameBook_Chat で、上記のコードで実行されている同じサービスと通信したいと考えています。bindService() 関数の実行時に、LogCat サービスは「initService() は false にバインドされています」と表示します

したがって、基本的に、2番目のアプリをサービスと通信させることはできません。どのような修正を行うことができるか誰かに教えてもらえますか?

4

1 に答える 1