Xiaomi で仮の位置情報を使う:MIUI と HyperOS
「偽装をオンにしても数分ですべて元に戻る」という声は、ほぼ必ず Xiaomi、Redmi、POCO のスマートフォンから寄せられます。原因はアプリではありません。MIUI と HyperOS は標準の Android よりも厳しくバックグラウンドのプロセスを管理し、偽装を維持するサービスを終了させます。以下では、具体的に何が起きているのかと、それを解決する 3 つの設定を説明します。
アプリの自動起動をオンにする
設定 → アプリ → アプリを管理 → Mock Location →「自動起動」(バージョンによっては「バックグラウンドで実行」)。3 つの設定の中で最も重要です。これがないと、プロセスを終了させた後にシステムがそれを戻さず、手動でアプリを開くまで偽装は復元されません。

バッテリーの制限を解除する
同じアプリの画面で「バッテリーセーバー」または「アクティビティ制御」を探し、「制限なし」を選びます。このモードでは、ファームウェアが自分の判断でバックグラウンドサービスを停止させなくなります。

最近使ったアプリでアプリを固定する
最近使ったアプリの一覧を開き、Mock Location のカードを下に引くと、鍵アイコンが表示されます。固定したアプリは、「×」で一覧を消去しても、「すべて消去」のスワイプでも閉じられません。

偽装が続くか確認する
偽装をオンにしてアプリを最小化し、スマートフォンを 10〜15 分そのままにします。その後、通知パネルに通知が残っていて、別の地図アプリに選んだ地点が表示されたままであることを確認します。

内部で何が起きているか
ファームウェアがアプリのプロセスを終了させます。システムログでは、システムの判断による強制停止として記録されます。その後、テスト用のプロバイダーは最後に書き込まれた値のまま Android に登録され続けますが、新しい座標を書き込む者はいません。それを作ったプロセスがもう存在しないからです。
外から見ると「偽装が固まった」ように見えます。座標はそのままですが更新されなくなり、しばらくするとシステムが実際の位置に戻します。
アプリが自分で行うこと
ファームウェアの設定に関係なく、2 つの復旧の仕組みが働きます。1 つ目:アプリを開くと、保存された状態と実際の状態を比べ、プロセスが終了していれば偽装を戻します。この方法は常に機能します。2 つ目:監視タイマーが定期的にバックグラウンドで状態を確認し、サービス自体を戻そうとします。
ただし、どちらにも限界があります。ファームウェアがアプリのバックグラウンドでの起動を禁じていると、あなたなしではサービスを戻せません。その時点ではコードがまったく実行されないからです。
自動起動がほかの設定より重要な理由
違いは数値で確かめられます。自動起動がオフだと、システムはプロセスを終了させた後、サービスをまったく再起動しません。復旧するのは自分でアプリを開いたときだけです。自動起動がオンなら、システムは終了させたサービスを約 3 秒で戻し、アプリは保存された状態を読み込んで、操作なしで偽装を続けます。
ですから、3 つの設定のうち 1 つだけ行うなら、自動起動にしてください。
再起動後の復元
有効だった仮の位置情報は、スマートフォンの起動時に、最も早いシステムイベントを使って自動で復元されます。画面のロックを解除する前でもです。PIN を設定したスマートフォンでは、スマートフォンを手に取るのを待たずに偽装を戻す唯一の方法です。
実際の HyperOS 端末での計測で、これが重要な理由がわかりました。早い起動イベントのキューは 1 秒余りでアプリに届きますが、通常のキューは 17 秒かかります。システムのアップデーター、クラウドサービス、銀行アプリが先に並んでいるからです。
ほかの UI での同じ設定
同様の動作は、Huawei(設定 → バッテリー → アプリ起動 → アプリの自動管理をオフ)、Samsung(設定 → デバイスケア → バッテリー → バックグラウンドでの使用の制限)、OPPO、realme、vivo でも起こります。名前は違っても考え方は同じで、アプリのバックグラウンドでの動作を許可し、積極的な省電力の対象から外します。それでも偽装が止まる場合は、よくある原因の解説 をご覧ください。