My log....
05-05 12:02:50.620: E/AndroidRuntime(32319): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxxxxxx.apps.xxx/com.xxxxxx.apps.xxx.activities.SplashActivity}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.licensing.ILicensingService }
Where do I fix my code?
package com.xxxxxx.apps.xxx.activities;`
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Secure;
import android.util.Log;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import com.android.vending.licensing.AESObfuscator;
import com.android.vending.licensing.LicenseChecker;
import com.android.vending.licensing.LicenseCheckerCallback;
import com.android.vending.licensing.ServerManagedPolicy;
import com.xxxxxxxx.apps.xxxx.R;
import com.xxxxxx.libs.util.Platform;
public class SplashActivity extends Activity {
/*[ $if full $ ]*/
private final class xxxLicenseCheckerCallback implements LicenseCheckerCallback {
@Override
public void allow() {
Log.i(TAG, "License OK");
licenseResponseHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = createSequencerActivityIntent();
startActivity(intent);
finish();
}
}, 2000);
}
@Override
public void dontAllow() {
Log.e(TAG, "License check FAILED");
new AlertDialog.Builder(SplashActivity.this)
.setTitle(R.string.app_name)
.setMessage("License check failed.\nPlease try starting the app again" +
" when your internet connection is ON.\n" +
"This is required to protect the app from piracy.\n" +
"If the problem persists, please contact us at [email protected].")
.setCancelable(false)
.setNegativeButton("Close the app", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SplashActivity.this.finish();
}
})
.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
licenseResponseHandler.postDelayed(new Runnable() {
@Override
public void run() {
licenseChecker.checkAccess(licenseCheckerCallback);
}
}, 1000L);
}
})
.show();
}
@Override
public void applicationError(ApplicationErrorCode errorCode) {
Log.e(TAG, "License check unavailable: " + errorCode);
new AlertDialog.Builder(SplashActivity.this)
.setTitle(R.string.app_name)
.setMessage("We were unable to check your license.\nPlease try restarting the app again.\nIf the problem persists, please contact us at [email protected].")
.setCancelable(false)
.setPositiveButton("Close the app", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SplashActivity.this.finish();
}
})
.show();
}
}
/*[ $endif$ ]*/
private static final String TAG = SplashActivity.class.getSimpleName();
/*[ $if full $ ]*/
private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnZaL3WpvXaBlnEu" +
"ToXHlWmraQ8bz7tyQ4TyaFF17BocoLpJgfNXDM43ezpaVeDYCrX7qcExn79" +
"QcSFoKzlS9ILbWEQ3mt7+kim6f1DIMqKIWZ6F0VyovshW84ps0m4Aq0ZGnp" +
"MOMBy/v63ACcRiZkymEIJSwiDp3Twdoj2R9I+NkBvjM2NSF0u2ejzmBYx6h" +
"z0jlvIvOhTbGmqJ0zQKFyKDJ17WROgscXSQ38ehvIJ2ycJvsGTsFWr/yp8P" +
"bMGVTrpLI1SZlRIY3zw8JFxxI+bx19c7+SZUqHyePjxGpq5R13r+tQRvoC6" +
"99S6EFZ3McPGXw7aZK+d21z82ILKNANwIDAQAB";
private static final byte[] SALT = new byte[] {
-46, 65, 30, -128, -103, -42, 77, -117, -36, -110, -57, 74, 64, 51, 88, -95, -11, 32, -60, 89
};
private LicenseCheckerCallback licenseCheckerCallback;
private LicenseChecker licenseChecker;
/*[ $endif$ ]*/
private Handler licenseResponseHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
licenseResponseHandler = new Handler();
/*[ $if full $ ]*/
// Check the license
licenseCheckerCallback = new xxxLicenseCheckerCallback();
String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
licenseChecker = new LicenseChecker(this,
new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)),
BASE64_PUBLIC_KEY);
licenseChecker.checkAccess(licenseCheckerCallback);
// End license check
/*[ $else$
licenseResponseHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = createSequencerActivityIntent();
startActivity(intent);
finish();
}
}, 2000);
$endif$ ]*/
ImageView imageView = new ImageView(this);
if (Platform.isIcsOrLater()) {
imageView.setScaleType(ScaleType.FIT_XY);
imageView.setImageResource(R.drawable.splash_ics);
} else {
imageView.setScaleType(ScaleType.CENTER_CROP);
imageView.setImageResource(R.drawable.splash);
}
setContentView(imageView);
}
@Override
protected void onDestroy() {
super.onDestroy();
/*[ $if full $ ]*/
if (licenseChecker != null) {
licenseChecker.onDestroy();
}
/*[ $endif$ ]*/
}
protected Intent createSequencerActivityIntent() {
return new Intent(SplashActivity.this, SequencerActivity.class);
}
}
This is a known bug of the Google Play Licensing Library. The issue is assigned and it will be fixed in the future, in the mean time if you want to use the library also with Lollipop there is a workaround:
In LicenseChecker.java
change from this:
boolean bindResult = mContext.bindService(new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
to this:
Intent serviceIntent = new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")));
serviceIntent.setPackage("com.android.vending");
boolean bindResult = mContext.bindService(serviceIntent,
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With