Intent サービスを呼び出しているアップロードのアクティビティがあります。そこでは、API リクエストの呼び出しを処理しています。
アップロード タグを表示するために、サービスが実行されているかどうかをアクティビティに知らせたい。
サービスが実行されているかどうかを判断するために、次のことを試しました。
public void startUploadServiceTask() {
if (Util.isNetworkAvailable(mContext)) {
if (!isMyServiceRunning(UploadDriveService.class)) {
startService(new Intent(mContext,
UploadService.class));
}
} else {
Toast.makeText(mContext,
"Service is already running.", Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(mContext,
getString(R.string.please_check_internet_connection),
Toast.LENGTH_SHORT).show();
}
}
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
Log.e("ALL SERVICE", service.service.getClassName().toString());
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
しかし、Activity Manager Running Service Info では、実行しているインテント サービスのクラスを取得していないため、これは常に誤りです。
API 呼び出しの応答に Broadcast を使用しました。
私もこのコードをチェックしました。
if(startService(someIntent) != null) {
Toast.makeText(getBaseContext(), "Service is already running", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getBaseContext(), "There is no service running, starting service..", Toast.LENGTH_SHORT).show();
}
ただし、このコードでは、サービスをチェックすると、サービスが再度開始されるため、サービスが 2 回呼び出されます。
これで私を助けてください。