2

Androidライセンスを実装しようとしています。指示に従ってすべてを行いました。ただし、ライセンスを使用していないためにアプリを閉じる必要がある場合。私は例外を得る:

06-12 09:11:31.384: E/LicenseChecker(383): Could not bind to service.
06-12 09:11:36.884: E/ActivityThread(383): Activity com.myapp.main.mactivity has leaked ServiceConnection com.google.android.vending.licensing.LicenseChecker@406a4428 that was originally bound here
06-12 09:11:36.884: E/ActivityThread(383): android.app.ServiceConnectionLeaked: Activity com.myapp.main.mactivity has leaked ServiceConnection com.google.android.vending.licensing.LicenseChecker@406a4428 that was originally bound here
06-12 09:11:36.884: E/ActivityThread(383):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:932)
06-12 09:11:36.884: E/ActivityThread(383):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:827)
06-12 09:11:36.884: E/ActivityThread(383):  at android.app.ContextImpl.bindService(ContextImpl.java:1082)
06-12 09:11:36.884: E/ActivityThread(383):  at android.content.ContextWrapper.bindService(ContextWrapper.java:370)
06-12 09:11:36.884: E/ActivityThread(383):  at com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)

これを引き起こす可能性があるのは何ですか?

私が作成するonCreateメソッド:

mHandler = new Handler();

// Try to use more data here. ANDROID_ID is a single point of attack.
String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

// Library calls this when it's done.
mLicenseCheckerCallback = new MyLicenseCheckerCallback();
// Construct the LicenseChecker with a policy.
mChecker = new LicenseChecker(
    this, new ServerManagedPolicy(this,
        new AESObfuscator(SALT, getPackageName(), deviceId)),
    BASE64_PUBLIC_KEY);
doCheck();

およびonDestroy:

@Override
protected void onDestroy() {
    super.onDestroy();
    mChecker.onDestroy();
}

では、この例外は本当に何を意味するのでしょうか?

4

2 に答える 2

2

私もこれに出くわしました。私は4.0.4のAVDGalaxyNexusでテストしていました。

現在のアクティビティのコンテキストを使用する代わりに、getApplicationContext()を使用する他のスレッドの提案を試しました。しかし、それは役に立ちませんでした。

コメントに記載されているように、実際のデバイスに切り替えると、実際に問題が修正されました。

動作する可能性のある他のオプションは次のとおりです。

  1. Google APIベースのエミュレーター(AVDマネージャーで構成)を使用します。
  2. [設定]でエミュレータにGoogleアカウントを追加します。
  3. 上記のアカウントがPlayストア開発コンソールのAndroidライセンスのテスターのリストに含まれていることを確認します。
于 2013-03-28T04:38:53.913 に答える
1

デバイスの代わりにエミュレーターを使用している場合:

  1. エミュレータがAndroidAPIではなくGoogleAPIで実行されていることを確認してください。これは仮想デバイスマネージャーで設定できます
  2. エミュレーターが正しいAPIで実行されたら、エミュレーターを開き、[設定]-> [アカウントの追加]に移動して、Gmailテストアカウント(適切なライセンス応答を得るためにGoogle Playで設定したものと同じもの)でログインします。
  3. サインインしたら、アプリを実行すると、エミュレーターで正しく実行されます。

基本的な問題は、エミュレーターでアプリを実行しようとしたときに、有効なテストアカウントにログインしていないことです。

于 2013-06-20T21:54:23.530 に答える