2015-04-11 2 views
1

Итак, все мои приложения получают это исключение, когда они работают на 5.0. , ,Что лучше всего исправить ошибку 5.0?

java.lang.IllegalArgumentException: Обслуживание Намерение должно быть четко: Намерение {действие = com.android.vending.licensing.ILicensingService}

После прибегая к помощи вокруг, я считаю, что это вызвано ошибкой в ​​коде лицензирования Google в LicenseChecker.java, но предлагаемые изменения все немного разные, поэтому я не уверен, что делать. И это сбивает меня с толку, что мы должны сделать моды для кода Google.

подозреваемый код в моем LicenseChecker.java это ...

 Log.i(TAG, "Binding to licensing service."); 
     try { 
      boolean bindResult = mContext 
        .bindService(
          new Intent(
            new String(
              Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))), 
          this, // ServiceConnection. 
          Context.BIND_AUTO_CREATE); 

Мы должны добавить

serviceIntent.setPackage("com.android.vending"); 

где-то в этом коде.

Итак, мои вопросы (1) - это действительно исправление? и (2) если да, то какой именно должен выглядеть модифицированный код? Thanks, Dean

+0

возможно дубликат [Google In-App биллинг, IllegalArgumentException: Service Намерение должно быть явным, после обновления до Android L Dev Preview] (http://stackoverflow.com/questions/24480069/google-in-app-billing-illegalargumentexception-service-intent-must-be-explicit) – rds

ответ

6

Это действительно исправление?

setPackage() достаточно, чтобы пройти мимо implicit- Intent ограничения на уровне API 21+. Я не могу сказать, что это правильный пакет.

Какой именно должен выглядеть модифицированный код?

Заменить:

new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))) 

с:

new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))) 
    .setPackage("com.android.vending") 
+0

Спасибо, я проиграл в этой проблеме. – ferdiado

+0

CommonsWare, Это сработало. Благодарю. Почему Google сделал бы что-то подобное? А потом не исправить? –

+0

@DeanBlakely: «Почему Google сделала бы что-то вроде этого?» - потому что у службы безопасности есть проблемы. См. Http://commonsware.com/blog/2013/09/26/android-exported-service-mitm-attacks.html и http://commonsware.com/blog/2014/06/29/dealing-deprecations-bindservice .html. «А потом не исправить?» - они, вероятно, в какой-то момент, обернув вызов 'bindService()' в свой собственный API, который вы получите из SDK Play Services. Я не могу рассуждать о том, почему они еще этого не сделали. – CommonsWare

Смежные вопросы