私のアプリの 1 つで、ライブラリ プロジェクトに FileCache があります。アプリ自体には、ライブラリ内の FileCache が新しいファイルをキャッシュしたときに通知を待機する Service があります。
ライブラリは Android ライブラリ プロジェクトであり、アプリに含まれています。
ライブラリから App Service に通知を送信する最良の方法は何ですか?
ブロードキャストを送信するには、サービス内のレシーバーを知る必要があります。これは、ライブラリ プロジェクト内からはできません。
ライブラリ コードから Service 内の関数を呼び出すこともできません。
コードのスケルトンは次のとおりです。
// This is in the App
public class MyService extends Service implements OnBufferingUpdateListener, OnCompletionListener, OnErrorListener, OnInfoListener, OnPreparedListener {
public class MyBroadcastReceiver extends BroadcastReceiver {
public static final String BROADCASTRECEIVER = "xx.yyy.zzzzz.MyService.MyBroadcastReceiver";
@Override
public void onReceive(final Context context, final Intent intent) {
}
}
}
// This is in a library project that's included in the App
public class FileCache {
private void doThread() {
final Handler handler = new Handler() {
@Override
public void handleMessage(final Message message) {
try {
if (processed.size() > 0) {
//TODO: Notification to Service
processed.clear();
}
} catch (NullPointerException nullPointerException) {
//TODO:
}
if (queue.size() > 0) {
doThread();
} else {
running = false;
}
}
};
new Thread() {
@Override
public void run() {
for (Map.Entry<String, QueueElement> entry : queue.entrySet()) {
QueueElement element = entry.getValue();
if (element != null) {
File file = fetch(element.url);
if (file != null) {
ProcessedElement processedElement = new ProcessedElement();
processedElement.file = file;
processedElement.url = element.url;
processed.put(entry.getKey(), processedElement);
}
}
deleteFromQueue(entry.getKey());
}
handler.sendEmptyMessage(0);
}
}.start();
}
}