15

アプリケーションのロックを解除するために、Android デバイスごとに固有のシリアル番号を生成できるようにしたいと考えています。どうすればこれを行うことができますか?

編集:

その理由は、有料アプリケーションを刷新し、別のパッケージ名を持つ古いバージョンを購入したユーザーに、ロック解除可能な無料バージョンのアプリケーションをダウンロードしてフル バージョンを取得する方法を提供したいからです。無料バージョンを完全に機能するバージョンに変えるために入力できるコードを生成して表示する古いバージョンへの更新をプッシュします。

4

6 に答える 6

9

Googleアカウント名を使用しないのはなぜですか? 簡単に入手でき、マニフェスト ファイルで簡単なリクエストを行うだけで済みます。彼らは gplay でライセンスを購入しているので、g+ アカウント名で十分なはずです...

マニフェストで:

<manifest ... >
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    ...
</manifest>

アカウント名を取得するには:

AccountManager am = AccountManager.get(this); // "this" references the current Context

Account[] accounts = am.getAccountsByType("com.google");

名前を取得するには:

accounts[0].name

コード全体でアカウントを見つけたことを確認するための簡単なアラートを作成します。

Account[] accounts = am.getAccountsByType("com.google");
    AlertDialog.Builder miaAlert = new AlertDialog.Builder(this);

    miaAlert.setTitle("i found an account name!");
    miaAlert.setMessage(accounts[0].name);
    AlertDialog alert = miaAlert.create();
    alert.show();
于 2012-12-12T12:02:15.607 に答える
9

Android idを使用できます。この ID はデバイスに固有である必要がありますが、設定方法はデバイス メーカーの実装によって異なります。

String deviceId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID);

Android ID は電話の出荷時設定へのリセット時に変更される可能性があり、ユーザーは root 化された電話でも変更できます。ただし、ユーザーを識別するための ID が必要な場合は問題ありません。

于 2010-08-12T10:41:45.333 に答える
2

PRNGの問題を解決する際のGoogle Developerのソリューションから、リフレクションを介して一意のデバイスシリアル番号を取得します:

http://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html

/**
 * Gets the hardware serial number of this device.
 *
 * @return serial number or {@code null} if not available.
 */
private static String getDeviceSerialNumber() {
    // We're using the Reflection API because Build.SERIAL is only available
    // since API Level 9 (Gingerbread, Android 2.3).
    try {
        return (String) Build.class.getField("SERIAL").get(null);
    } catch (Exception ignored) {
        return null;
    }
}
于 2014-05-07T08:42:05.983 に答える
2

Android は、有料アプリで使用するためのライセンス サービスを既に提供しています。これを使いたくない理由はありますか?アプリを特定の電話にロックしようとすると、デバイスを切り替えるユーザー (たとえば、遅かれ早かれすべてのデバイス) を本当に困らせることに注意してください。

于 2010-08-12T07:40:02.917 に答える
0

シリアル番号はすべてのデバイスで使用できるため、一意の識別子として使用できます。IMEI は WIFI タブ (SIM カード スロットのないタブ) では使用できないため、一意の識別子として使用しないでください。

使用できます

    try {
        Class<?> c = Class.forName("android.os.SystemProperties");
        Method get = c.getMethod("get", String.class, String.class);
        serial = (String) get.invoke(c, "ril.serialnumber", "unknown");
    } catch (Exception ignored) {
    }
于 2014-03-04T10:28:02.043 に答える
-1

これには IMEI 番号を使用できます。

于 2010-08-12T05:19:17.160 に答える