Androidでは、現在、一番上のアクティビティ名を取得したいと考えています。 ActivityManager.getRunningTasks(1);
のようなメソッドは非推奨であり、AccessibilityService
はユーザーが有効にする必要があります。そこで私はRxJavaでこれを行うことにしました。基本的には、Subjectを保持するSingletonクラスを1つ用意します。アクティビティの再開時およびアクティビティの一時停止時にこのSubjectを更新します。また、私はバックグラウンドサービスからこのサブジェクトを購読して、現在実行中のアクティビティを取得します。Android、RxJavaを使用して現在のアクティビティを取得
私の質問は、バックグラウンドジョブで現在のアクティビティ名を同期的に取得する方法です。
件名ホルダーシングルトンクラスActivityTracker.class
public class ActivityTracker {
private static ActivityTracker instance;
public static synchronized ActivityTracker getInstance() {
if (instance == null) {
instance = new ActivityTracker();
}
return instance;
}
public PublishSubject<String> currentActivity = PublishSubject.create();
}
VideoPlayerActivity.class
ActivityTracker.getInstance().currentActivity
.onNext(VideoPlayerActivity.class.getSimpleName());
ActivityTrackerでBehaviorSubjectをこのように使用しようとしました: 'public BehaviorSubject currentActivitySubject = BehaviorSubject.create();私はあなたの中にいた場合 getActivityName(){ return currentActivitySubject.asObservable(); } '。しかし、何も返さないのであれば、コードは 'getActivityName'を取得しようとした後に動作しなくなるだけです。 –
BehaviourSubject
を使用します。 public Observable私の' currentActivitySubject'は空で、最初の 'onNext'をまだ取得していません。このケースをどうすれば処理できますか? –
まあ、開始アクティビティを知っています。それはマニフェストで宣言されています。その名前を作成名に渡すことができます。例えば。 public 'BehaviorSubject currentActivitySubject = BehaviorSubject.create(SplashActivity.class.getSimpleName());'、サブジェクトはあなたの 'ActivityTracker'のメンバです。 –
Blackbelt