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 的 AVD Galaxy Nexus 进行测试。

我尝试了其他线程的建议来使用 getApplicationContext() 而不是使用当前活动的上下文。但这并没有帮助。

切换到真实设备确实解决了评论中提到的问题。

另一个可能有效的选项如下:

  1. 使用基于 Google API 的模拟器(在 AVD 管理器中配置)。
  2. 在“设置”中将 Google 帐户添加到模拟器。
  3. 验证上述帐户是否在 Play 商店开发控制台中的 Android 许可测试人员列表中。
于 2013-03-28T04:38:53.913 回答
1

如果您使用的是模拟器而不是设备:

  1. 确保您的模拟器在 Google API 上运行,而不是在 Android API 上运行。您可以在虚拟设备管理器中进行设置
  2. 一旦您的模拟器在正确的 API 上运行,打开模拟器,然后转到设置 -> 添加帐户并使用您的 Gmail 测试帐户登录(您应该在 Google Play 中设置相同的帐户以获得正确的许可证响应)
  3. 登录后,运行您的应用程序,它应该可以在模拟器上正常运行

基本问题是当您尝试在模拟器上运行应用程序时,您没有登录到有效的测试帐户。

于 2013-06-20T21:54:23.530 回答