web-dev-qa-db-ja.com

onTaskRemoved()がHUAWEIおよびXIAOMIデバイスで呼び出されない

アプリをデバイスの最新リストからスワイプして削除したことを検出するために、サービスでonTaskRemoved()メソッドを使用しています。これが発生したときに実行する必要があるいくつかのロギングおよびその他の操作を実行します。完璧に機能します。

次に、Android 6.0を実行しているHUAWEIデバイスでこのメソッドをチェックしました。このメソッドは呼び出されません。Log.d呼び出しも追加しました。予想どおり、このログは表示されません。 XIOMIデバイス。

これがなぜ起こるのか、これを解決する方法はありますか?または、onTaskRemoved()に依存せずに、最近のリストからアプリが削除されたことを検出する別の方法がありますか?

ありがとう

32
Alon Minski

ユーザーがアプリをxiaomiデバイスにインストールしたら、ユーザーを自動開始アクティビティにリダイレクトし、ユーザーにスイッチを入れるように指示します。

if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
                startActivity(intent);
            }

上記のコードを使用して、xiaomiで自動開始アクティビティページを起動します

16
Vishnu Prasad

一部のデバイス(一部のLG、Huawei、Xiaomiなど)では、Android STICKYサービスを再起動します。アプリがこのリストに手動で追加されていない場合、Androidは単にプロセスを強制終了し、再起動せず、onTaskRemoved()。これは、STICKYサービスをバックグラウンドで実行できるアプリの数を制限することにより、バッテリー寿命を維持するために行われます。

そのようなデバイスでは、「設定」にページが表示されます。「電源管理」の下、場合によっては他の場所で、アプリケーションを明示的に追加する必要があります。また、このリストにアプリを明示的に追加するようユーザーに伝える必要があります。

27
David Wasser

サービスでonTaskRemoved()メソッドを使用して、スワイプしてアプリがデバイスの最近のリストから削除されたことを検出しました。

David Wasser が提供する答えにさらに光を当てて

Xiaomiにはアプリのアクセス許可と呼ばれる機能があり、ユーザーがアプリの自動起動(サービス)を許可する必要があるため、Xiaomiでは新しくありません。あなたの場合、Serviceは一度スタックから終了すると呼び出されません。

次のようにして、アプリの自動起動を許可します。

Settings > permissions > Autostart

6
W4R10CK

私のHuaweiでも問題に直面していました。設定=>省電力=>アプリの保護=>アプリを見つけて有効にしてください。サービスが実行を開始します。

3
Sanjay Goswami

免責事項:これは良い解決策ではありません。それはハックです

ユーザーによるアプリの強制終了を防ぐことができます

マニフェスト内->アクティビティタグ内->次の行を追加

Android:excludeFromRecents = "true"

アプリは最近のアプリの履歴に表示されません。そのため、ユーザーはアプリを強制終了できません。

1
Ranjith Kumar