Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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_Eclipse_Android 5.0 Lollipop - Fatal编程技术网

Java Android应用程序在棒棒糖上崩溃

Java Android应用程序在棒棒糖上崩溃,java,android,eclipse,android-5.0-lollipop,Java,Android,Eclipse,Android 5.0 Lollipop,嗨,我在我的应用程序上使用谷歌许可证检查器,它在API 19及以下版本上工作,但在棒棒糖上崩溃。我看到了必须添加到我的许可证检查代码中的代码,但我不知道该将此代码放在何处,也不知道应该编辑什么。这是我的密码 日志: Java代码: public class Splash extends Activity { MyLicenseCheckerCallback mLicenseCheckerCallback; LicenseChecker mChecker; byte[] SALT = new b

嗨,我在我的应用程序上使用谷歌许可证检查器,它在API 19及以下版本上工作,但在棒棒糖上崩溃。我看到了必须添加到我的许可证检查代码中的代码,但我不知道该将此代码放在何处,也不知道应该编辑什么。这是我的密码

日志:

Java代码:

public class Splash extends Activity {

MyLicenseCheckerCallback mLicenseCheckerCallback;
LicenseChecker mChecker;
byte[] SALT = new byte[] {
         my salt no.             };
     //Handler mHandler;
     String BASE64_PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoxvDF3HGQtrRch14wCPN6nAxasak8X4shJM6bCumNS+6xRXTnRZOSyAvHNa1145KlE/i1sy/";
     Context mContext;
     IBinder serviceBinder;
     String deviceId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.splash);

    mLicenseCheckerCallback = new MyLicenseCheckerCallback();
    deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
    // Construct the LicenseChecker with a policy.
    mChecker = new LicenseChecker(
        this, (Policy) new ServerManagedPolicy(Splash.this, new AESObfuscator(SALT, getPackageName(), deviceId)),
        BASE64_PUBLIC_KEY);
    doCheck();


}

private class MyLicenseCheckerCallback implements LicenseCheckerCallback {


    @Override
    public void allow(int reason) {
        // TODO Auto-generated method stub
         if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }

        // Toast.makeText(Splash.this, "License Verified", Toast.LENGTH_SHORT).show();
         Intent intent=new Intent(Splash.this,Home.class);
         startActivity(intent);
         finish();

            // Should allow user access.
            // so do nothing
    }

    @Override
    public void dontAllow(int reason) {
        // TODO Auto-generated method stub
         if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
       //  Toast.makeText(Splash.this, "License Verification Failed", Toast.LENGTH_SHORT).show();
         createDialog();
    }

    @Override
    public void applicationError(int errorCode) {
        // TODO Auto-generated method stub

    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mChecker.onDestroy();
}

private void doCheck() {
       // mCheckLicenseButton.setEnabled(false);
        setProgressBarIndeterminateVisibility(true);
      ///  mStatusText.setText(R.string.checking_license);
        mChecker.checkAccess(mLicenseCheckerCallback);
}

public void createDialog(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("PIRACY WARNING");
    builder.setMessage("This application is not licensed. Please purchase it from Android Market.  If you received this message in error, please contact Support.");
    builder.setPositiveButton("Buy Now", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(
                "http://market.android.com/details?id=" + getPackageName()));
            startActivity(marketIntent);
        }
    });
    builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
}
}
这是我得到的另一个代码,它可以解决我的问题。但我不知道该把它放在哪里

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);

在等待正式解决方案时,当前的解决方案包括修补Google的LicenseChecker类

com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)
像这样:

new String(
-    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
+    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")))
+    .setPackage("com.android.vending"), // this fix the 'IllegalArgumentException: Service Intent must be explicit'
     this, // ServiceConnection.
用语句setPackage(“com.android.vending”)添加包名可以明确目的,即“安全”(根据android棒棒糖的要求)

注意:

请注意,在修改LicenseChecker类后,必须将min sdk版本从3更改为4(谢谢)

来源:


您的目标是gradle中的api 21吗?首先发布日志,其次我认为隐式意图不再受支持。我面临同样的问题。可能重复谢谢!我花了几个小时试图找到解决办法。通过Ctrl键点击“mChecker.checkAccess(mlicenceckercallback);”-Ctrl键点击checkAccess,您将在Android Studio中找到需要修复的位置。我认为这个答案应该被接受为正确的答案。正确的解决方案是,如果谷歌升级了他们的库并将它们迁移到gradle,那么……为我工作。请注意,在修改LicenseChecker类后,您必须将min sdk版本从3更改为4(@Pascal您应该在您的消息中警告用户)@Billda让lvl在android studio中工作不需要所有这些手动破解……让它一起谷歌。
new String(
-    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
+    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U=")))
+    .setPackage("com.android.vending"), // this fix the 'IllegalArgumentException: Service Intent must be explicit'
     this, // ServiceConnection.