Androidアプリケーションで特定のコードを1回だけ実行したい.共有設定ソリューションは、アプリケーションマネージャーに移動してデータの消去を実行すると共有設定が削除されるため、ソリューションではありません。アプリケーションはそれを新しい新規インストールとして扱います。あまりにも失敗した Application クラスを試してみましたが、共有設定と同じように機能します。共有設定とアプリケーション クラス以外のヘルプをいただければ幸いです。
ありがとう。
Androidアプリケーションで特定のコードを1回だけ実行したい.共有設定ソリューションは、アプリケーションマネージャーに移動してデータの消去を実行すると共有設定が削除されるため、ソリューションではありません。アプリケーションはそれを新しい新規インストールとして扱います。あまりにも失敗した Application クラスを試してみましたが、共有設定と同じように機能します。共有設定とアプリケーション クラス以外のヘルプをいただければ幸いです。
ありがとう。
答えは、「一度だけ」が何を意味するかにかかっています。
を設定しSharedPreference
ます。
ユーザーがデータを消去するか、アンインストールしてから再インストールすると、コードが再度実行されます。
空のファイル (フラグ ファイル) を外部ストレージの既知の場所に保存します。
次のいずれかを実行できます。
この 2 番目のアプローチは有望です。データの消去と再インストールに耐性があります。
ただし、ストレージがリムーバブルまたはマウント不可能な外部ストレージを使用するのは難しいです。ストレージが利用できない場合のフォールバックがどうなるかわかりません。(手がかり:早く失敗する)。
また、慎重に配置されたファイルをユーザーが (偶然または故意に) 削除しないことを信頼できない場合もあります。
これはこの質問の範囲外だと思います。ただし、AccountManager のドキュメントを確認することから始めて、そこから進んでください。
わかりましたので:
このデバイスの状態を保存できる外部ソースで確認する必要があります。それを「サーバー」と呼びましょう。
サーバーに対して自分自身を一意に識別するための識別子が必要です。
通常、UUIDを生成してどこかに保存します。しかし、ストレージ オプションはどれも信頼できません。
したがって、静的な外部環境から識別子を生成する必要があります。iPhone の廃止された UDIDはまさにこれで、さまざまなハードウェア識別子から生成されました。
このリンクをコピーすることは素晴らしい出発点ですが、セキュリティ クリアランスによっては、独自のリンクを作成することをお勧めします。世界中の誰もがあなたのアプリまたはあなたのアプリと同じアルゴリズムを使用した場合、プライバシーへの影響が生じる可能性があります (これが、Apple が UDID を廃止し、各アプリが独自の UUID を使用する必要がある理由です)。
いずれにせよ、これは (せいぜい) エッジ ケースの非常に大量のエンジニアリング作業 (サーバーを含む) であるため、避けたいと思います。
さらに悪いことに、アプリをインターネット接続に結び付けます。これは、コンテキストによっては悪いことになる可能性があります.
さらに、ルート化されたデバイスには、これらの識別子の一部またはすべてを変更するアクセス権があります。この後は少し哲学的になります。
手動で行ってください。真剣に、デプロイする前か後で手動で行ってください。
勝者のデバイスを選ぶ必要がある場合は、上記のように、サーバーとデバイスを識別する何らかの方法が必要です。手動で行い、選択して勝者に伝えます。しかし、それはこの Android の質問の範囲外でもあります。
電話自体に存在するデータに依存できない場合 (ユーザーがデータを削除できるため)、初期化をオンラインで実行したことを何らかの形で保存する必要があります。オンラインでサービスを定義し、初期化が実行されたデバイスとユーザーを追跡します。
この方法でデバイスを一意に識別できます:一意の Android デバイス ID はありますか?
好奇心から、シナリオは何ですか?
これには SQLite データベースを使用できます。update=0 と言う行が 1 つだけのテーブルを作成します。コードを実行したら、update の値を 1 に変更します。その後、update == 1 の場合は毎回条件をチェックし、それ以外の場合はコードを実行しないでくださいこれを実行します。アプリをアンインストールすると、データベースも削除されます。つまり、再び新規インストールと呼ばれます。これが役立つことを願っています。