title: Android App crashes on Lollipop - Service Intent must be explicit:
body: <p>My log....</p>
  
  <blockquote>
    <p>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 }</p>
  </blockquote>
  
  <p>Where do I fix my code?</p>
  
  <pre><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 xxxxxx@xxxxxx.com.")
                  .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 xxxxxx@xxxxxxx.com.")
                  .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);        
      }
  }
  </code></pre>