Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序许可致命异常:服务意图必须明确_Java_Android_Android Intent_Explicit - Fatal编程技术网

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

Java Android应用程序许可致命异常:服务意图必须明确,java,android,android-intent,explicit,Java,Android,Android Intent,Explicit,我正在将一个旧的Android应用程序从Eclipse迁移到Android Studio 大约3-4年前,在旧版本的Android上,一切都很好 现在,当我在Android 7.0上运行应用程序时,Android.vending.licensing会产生以下致命异常(服务意图必须明确): java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, reques

我正在将一个旧的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 } }
这是我的代码:

 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**
我已经被这件事困扰了两天,非常感谢你的帮助

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);
作为参考,发生此问题是因为必须显式定义意图,这意味着您必须调用setPackage(String)并向函数传递有关服务或其他内容的信息。
通过这样做,你可以告诉Android你想调用什么,因为Android的安全限制,你必须这样做。顺便说一下,您必须将Licensing module build.gradle文件中的minSdkVersion从3更改为4,以允许出于意图使用setPackage(字符串)。

一个简单的修复方法是将targetSdk设置为19(或20未测试)。有关此库(用于Eclipse和Android Studio)的压缩更正代码集,请参阅

推荐阅读:(隐式意图现在被视为安全风险)您可能需要更新到该库的较新版本。您没有自己调用
bindService()
;该库似乎正在这样做。LicenseCheckerCallback库?我想我在LicenseChecker.java中找到了它:boolean bindResult=mContext.bindService(新意图(ILicensingService.class.getName()),这个,//ServiceConnection.Context.BIND\u AUTO\u CREATE);如何更改以使意图明确?@commonware,我已更新到MarketLicensing库的最新版本,结果相同:java.lang.RuntimeException:Failure delivering ResultInfo{who=@android:requestPermissions:,request=110,result=-1,data=Intent{act=android.content.pm.action.REQUEST_PERMISSIONS launchParam=MultiScreenLaunchParams{mDisplayId=0 mFlags=0}(有附加项)}}到活动[…]java.lang.IllegalArgumentException:服务意图必须是明确的:意图{act=com.android.vending.licensing.licensingservice launchParam=MultiScreenLaunchParams{mDisplayId=0 mFlags=0}