2016-07-28 14 views
1

Я хочу включить покупки в приложении в приложении для Android с помощью API выставления счетов Google Play In-App 3. Приложение примера TrivialDrive, выпущенное Google содержит следующий раздел кода Java:Как правильно зарегистрировать BroadcastReceiver для покупок в приложении в файле манифеста в Android Studio

// Important: Dynamically register for broadcast messages about updated purchases. 
// We register the receiver here instead of as a <receiver> in the Manifest 
// because we always call getPurchases() at startup, so therefore we can ignore 
// any broadcasts sent while the app isn't running. 
// Note: registering this listener in an Activity is a bad idea, but is done here 
// because this is a SAMPLE. Regardless, the receiver must be registered after 
// IabHelper is setup, but before first call to getPurchases(). 
mBroadcastReceiver = new IabBroadcastReceiver(UpgradeActivity.this); 
IntentFilter broadcastFilter = new IntentFilter(IabBroadcastReceiver.ACTION); 
registerReceiver(mBroadcastReceiver, broadcastFilter); 

Это все хорошо и хорошо. Тем не менее, я еще не нашел правильного примера того, как зарегистрировать слушателя в файле AndroidManifest.xml или как ссылаться на зарегистрированного слушателя в Java-коде. Я видел другие примеры зарегистрированных слушателей, которые не относятся к биллингам in-ap, но не один конкретно, предназначенный для выставления счетов в приложении. Как мне это сделать?

я полагаю, может быть, неправильно, что манифест часть будет выглядеть примерно так:

<!-- Include required permissions for Google Mobile Ads to run --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<!-- VERY IMPORTANT! Don't forget this permission, or in-app billing won't work. --> 
<uses-permission android:name="com.android.vending.BILLING" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/logo" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/Platform.AppCompat"> 

    <!-- This meta-data tag is required to use Google Play Services. --> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    <!-- Here is the relevant part. --> 
    <receiver android:name="package.path.to.IabBroadcastReceiver" 
     android:permission="android.permission.SOME_UNKNOWN_PERMISSION"> 
     <intent-filter> 
      <action android:name="android.intent.action.SOME_UNKNOWN_ACTION"/> 
     </intent-filter> 
    </receiver> 

    <!-- Place activities here. --> 
</application> 

Я не знаю, что код Java для слушателя, который зарегистрирован в манифест будет выглядеть.

Заранее за вашу помощь.

ответ

0

вы должны создать приемник

<receiver 
     android:name=".Util.mBroadcastReceiver" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.parse.push.intent.RECEIVE" /> 
      <action android:name="com.parse.push.intent.DELETE" /> 
      <action android:name="com.parse.push.intent.OPEN" /> 
     </intent-filter> 
    </receiver> 

и создать класс:

public class mBroadcastReceiver extends ParsePushBroadcastReceiver { 

@Override 
public void onPushOpen(Context context, Intent intent) { 
     Intent i = new Intent(context, MainActivity.class); 
     i.putExtras(intent.getExtras()); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
} 

}

не забывайте разрешения:

<permission 
    android:name="your_package.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="your_package.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
+0

Спасибо за быстрый ответ. Я пробую это сейчас. Мне пришлось искать исходный код для ParsePushBroadcastReceiver. Однако в этом пакете есть ссылка на класс Task, который я не могу найти, и он не будет компилироваться без него. Где я могу найти класс задач? Он ссылается на AbstractQueryController и CacheQueryController. – user3188777

+0

Nevermind. Я нашел его в рамке болтов. – user3188777

+0

До сих пор я импортировал элементы синтаксического анализа, болтов, okhttp и okio для того, чтобы заставить вышеуказанный код работать, но все еще существуют разломанные зависимости, и он не будет компилироваться. Разве нет лучшего способа сделать это, что не требует бесчисленного импорта? – user3188777