Android应用程序许可致命异常:服务意图必须明确

Eas*_*der 4 java android explicit android-intent

我正在将旧版 Android 应用程序从 Eclipse 迁移到 Android Studio。

大约 3-4 年前,旧版本的 Android 一切都运行良好。

现在,当我在 Android 7.0 上运行该应用程序时,android.vending.licensing会产生以下(服务意图必须明确)致命异常:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=110, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } (has extras) }} to activity {HexagoniaGalaxyS7.hexagoniagalaxys7.apk/hexagoniagalaxys7.apk.HexagoniaActivity}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.licensing.ILicensingService launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } }

Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.licensing.ILicensingService launchParam=MultiScreenLaunchParams { mDisplayId=0 mFlags=0 } }
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

 String deviceId = tManager.getDeviceId();
 licenseCheckerCallback = new HexagoniaLicenseCheckerCallback();
 licenceChecker = new LicenseChecker(this, new ServerManagedPolicy(this, new AESObfuscator(JUMBLE, getPackageName(), deviceId)), BASE64_PUBLIC_KEY);

licenceChecker.checkAccess(licenseCheckerCallback); // **IT CRASHES ON THIS LINE**
Run Code Online (Sandbox Code Playgroud)

我已经被这个问题困扰了两天了——非常感谢任何帮助。

O.G*_*.G. 5

Intent intent = new Intent(new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))));
intent.setPackage("com.android.vending");
boolean bindResult = mContext
                            .bindService(
                                    intent,
                                    this, // ServiceConnection.
                                    Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)

供您参考,发生此问题是因为必须显式定义意图,这意味着您必须调用 setPackage(String) 并将有关服务或其他内容的信息传递给函数。通过这样做,您可以向 Android 说出您想要调用的内容,由于 Android 安全限制,您必须这样做。顺便说一句,您必须将许可模块 build.gradle 文件中的 minSdkVersion 从 3 更改为 4,以允许使用 setPackage(String) 来实现意图。