2015-03-03 3 views
2

Мы разработали приложение, которое требует второго приложения (про-приложение) для проверки его лицензии. Основное (бесплатное приложение) запрос, через трансляцию, в про-приложение для проверки лицензии. Проблема заключается в том, что когда приложение pro key закрыто, он никогда не получает широковещательную рассылку, отправленную основным приложением, чтобы обойти эту проблему, я должен открыть приложение pro key раньше, а затем попытаться снова проверить лицензию.Невозможно отправить широковещательную версию в закрытое приложение

Вот как основное приложение отправляет его:

public static void checkLicense(Context context) { 
    ... 
    Intent checkLicenseIntent = new Intent(Constants.CHECK_LICENSE_INTENT); 
    context.sendBroadcast(checkLicenseIntent); 
    ... 
} 

Вот про ключ манифеста приложения в:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="ar.com.myapp.prokey" 
    android:versionCode="2" 
    android:versionName="1.0.0.1" > 

    <permission 
     android:name="ar.com.myapp.prokey.CheckLicense" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="ar.com.myapp.ReceiveLicenseCheckResponse" /> 
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="14" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="ar.com.myapp.prokey.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name="ar.com.myapp.prokey.CheckLicenseReceiver" 
      android:permission="ar.com.myapp.prokey.CheckLicense" > 
      <intent-filter > 
       <action android:name="ar.com.myapp.prokey.CHECK_LICENSE" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
      </intent-filter> 
     </receiver> 

     <service android:name="ar.com.myapp.prokey.LicenseVerificationService" /> 
    </application> 

</manifest> 

ли это способ общения с приложениями? Должно ли вещание просыпаться в ключевом профи или нет? Любые идеи?

ответ

2

Если ваше приложение находится в состоянии «остановлено», оно не сможет получить какие-либо намерения. Вам нужно «активировать» приложение, активировав любой из его компонентов. Если вы используете setComponent() в трансляции, система активирует приложение перед отправкой намерения.

Добавьте эту строку в ваш код:

Intent checkLicenseIntent = new Intent(Constants.CHECK_LICENSE_INTENT); 
checkLicenseIntent.setComponent(new ComponentName("ar.com.myapp.prokey", "ar.com.myapp.prokey.CheckLicenseReceiver")); 
context.sendBroadcast(checkLicenseIntent); 

Вы можете прочитать на этой статье: https://devmaze.wordpress.com/2011/12/05/activating-applications/

+0

Это работает !!! Спасибо вам! – NahuelGQ

1

Должно ли вещание просыпаться в профиле или нет?

Если на «просыпаются» вы имеете в виду «раскошелиться процесс для него», то да, это будет, как только вы исправить <intent-filter>, избавившись от двух <category> элементов, как ваш Intent что вы вещания не имеет категории. Категории редко используются с трансляциями.

Также имейте в виду, что custom permissions have security issues.

+0

Я удалил категории и проблема остается – NahuelGQ

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