我的 LicenseCheckerCallback 调用方法 applicationError 并返回错误代码 6。 在我的 LogCat 中,我得到以下 JavaStack:
02-27 08:55:18.258: I/LicenseChecker(19572): Binding to licensing service.
02-27 08:55:18.268: D/dalvikvm(19572): threadid=1: still suspended after undo (sc=1 dc=1)
02-27 08:55:18.268: D/dalvikvm(19572): GC_CONCURRENT freed 112K, 12% free 7284K/8263K, paused 12ms+2ms, total 27ms
02-27 08:55:28.233: I/System.out(19728): broadcast Received
02-27 08:55:29.408: I/System.out(19572): DIALOG_RETRY Error
02-27 08:55:29.603: E/ActivityThread(19572): Activity My_company.My_appname.LicenseVerification has leaked ServiceConnection com.google.android.vending.licensing.LicenseChecker@41da7698 that was originally bound here
02-27 08:55:29.603: E/ActivityThread(19572): android.app.ServiceConnectionLeaked: Activity My_company.My_appname.LicenseVerification has leaked ServiceConnection com.google.android.vending.licensing.LicenseChecker@41da7698 that was originally bound here
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:966)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:860)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ContextImpl.bindService(ContextImpl.java:1364)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ContextImpl.bindService(ContextImpl.java:1356)
02-27 08:55:29.603: E/ActivityThread(19572): at android.content.ContextWrapper.bindService(ContextWrapper.java:401)
02-27 08:55:29.603: E/ActivityThread(19572): at com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)
02-27 08:55:29.603: E/ActivityThread(19572): at My_company.My_appname.LicenseVerification.bCheckLicense(LicenseVerification.java:84)
02-27 08:55:29.603: E/ActivityThread(19572): at My_company.My_appname.LicenseVerification.onCreate(LicenseVerification.java:65)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.Activity.performCreate(Activity.java:5188)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ActivityThread.access$700(ActivityThread.java:140)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
02-27 08:55:29.603: E/ActivityThread(19572): at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 08:55:29.603: E/ActivityThread(19572): at android.os.Looper.loop(Looper.java:137)
02-27 08:55:29.603: E/ActivityThread(19572): at android.app.ActivityThread.main(ActivityThread.java:4921)
02-27 08:55:29.603: E/ActivityThread(19572): at java.lang.reflect.Method.invokeNative(Native Method)
02-27 08:55:29.603: E/ActivityThread(19572): at java.lang.reflect.Method.invoke(Method.java:511)
02-27 08:55:29.603: E/ActivityThread(19572): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-27 08:55:29.603: E/ActivityThread(19572): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-27 08:55:29.603: E/ActivityThread(19572): at dalvik.system.NativeStart.main(Native Method)
我的许可证验证实现:
public class LicenseVerification extends Activity { private static final int LICENSED = 0x0; private static final int NOT_LICENSED = 0x1; private static final int LICENSED_OLD_KEY = 0x2; private static final int ERROR_NOT_MARKET_MANAGED = 0x3; private static final int ERROR_SERVER_FAILURE = 0x4; private static final int ERROR_OVER_QUOTA = 0x5; private static final int ERROR_CONTACTING_SERVER = 0x101; private static final int ERROR_INVALID_PACKAGE_NAME = 0x102; private static final int ERROR_NON_MATCHING_UID = 0x103; ApplicationContextProvider application; private static final byte[] SALT = new byte[] { -46, 65, 37, -128, -103, -57, 74, -64, 51, 88, -91, -45, 77, -17, -36, -113, -11, 32, -64, 89 }; private LicenseCheckerCallback mLicenseCheckerCallback; private LicenseChecker mChecker; private static final String BASE64_PUBLIC_KEY = "MYKEY"; public void sendBackLicenseCheck(String sStatus, int errorCode){ Intent replyIntent = new Intent("My_company.My_app.A_CUSTOM_INTENT"); replyIntent.putExtra("Status", sStatus); replyIntent.putExtra("ErrorCode", errorCode); this.sendBroadcast(replyIntent); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toast.makeText(this, "LicenseVerification ", Toast.LENGTH_SHORT); CheckLicense(); finish(); } public void CheckLicense(){ Context AppContext=application.getContext(); String sPackageName=AppContext.getPackageName(); //Toast.makeText(this, "sPackageName: "+sPackageName, Toast.LENGTH_LONG).show(); mLicenseCheckerCallback = new MyLicenseCheckerCallback2(); String deviceId = Secure.getString(AppContext.getContentResolver(), Secure.ANDROID_ID); mChecker = new LicenseChecker(this, new ServerManagedPolicy(AppContext, new AESObfuscator(SALT, sPackageName, deviceId)),BASE64_PUBLIC_KEY); mChecker.checkAccess(mLicenseCheckerCallback); } private class MyLicenseCheckerCallback2 implements LicenseCheckerCallback { public void allow(int reason) { System.out.println("Allow"); sendBackLicenseCheck("Allow",-1); } public void dontAllow(int reason) { sendBackLicenseCheck("Deny",0); System.out.println("DIALOG_GOTOMARKET"); if (reason == Policy.RETRY) { System.out.println("DIALOG_RETRY"); } else { System.out.println("DIALOG_GOTOMARKET"); } } @Override public void applicationError(int errorCode) { sendBackLicenseCheck("Error",errorCode); System.out.println("DIALOG_RETRY Error"); } } }
我已在 BETA 测试阶段发布了该应用,并为我的代码获取了 BASE64_PUBLIC_KEY。
我已在开发者控制台的 LICENSETEST 下的设置中添加了一个许可证测试帐户
我将测试响应设置为已许可
现在,当我使用 eclipse 在我的电脑上本地调试应用程序时,我看到我的 LicenseCheckerCallback (MyLicenseCheckerCallback2) 调用 applicationError,错误代码为 6。我没有找到有关代码 6 的任何信息,我不知道可能是什么原因。
有什么提示吗?
最佳答案
错误代码 6 表示您的应用没有 com.android.vending.CHECK_LICENSE
允许。您需要在 list 中声明您的应用使用此权限。
关于java - Android 许可证验证检查始终返回错误代码 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760314/