---
title: "Android Project Setup"
source_url: https://docs.rapyd.net/en/android-project-setup.html
lang: en
---

# Android Project Setup

### Package query declaration

Add the following to your `AndroidManifest.xml` so Android allows your app to see the Core package:

```xml
<queries>
    <package android:name="net.rapyd.core"/>
</queries>
```

### Callback activity

Your main activity must declare an intent filter for the `ACTION_CALLBACK` action so Core can return control to your app after a transaction:

```xml

<activity
    android:name=".MainActivity"
    android:exported="true">

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

    <intent-filter>
        <action android:name="ACTION_CALLBACK"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>

</activity>
```

### Broadcast receiver

Declare a `BroadcastReceiver` to receive results from Core. Register every action you intend to handle:

```xml

<receiver
    android:name=".receivers.ResultReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="TRANSACTION_RESULT_ACTION"/>
        <action android:name="TRANSACTION_CANCELLED_ACTION"/>
        <action android:name="TRANSACTION_STATUS_ACTION"/>
        <action android:name="VOID_RESULT_ACTION"/>
        <action android:name="END_OF_DAY_RESULT_ACTION"/>
        <action android:name="LAST_END_OF_DAY_RESULT_ACTION"/>
        <action android:name="X_REPORT_RESULT_ACTION"/>
        <action android:name="CONFIG_RESULT_ACTION"/>
        <action android:name="DAILY_SALES_ACTION"/>
        <action android:name="ACTION_GET_TRANSACTION_RESULT"/>
        <action android:name="ACTION_GET_TRANSACTION_IN_PROGRESS_RESULT"/>
        <action android:name="TRANSACTION_LIST_RESULT"/>
        <action android:name="ACTION_GET_AVAILABLE_MERCHANTS_RESULT"/>
        <action android:name="ACTION_OFFLINE_STATUS"/>
        <action android:name="ACTION_GET_PRINT_STATUS_RESULT"/>
        <action android:name="ACTION_CARD_DATA"/>
        <action android:name="ACTION_CORE_FAILED"/>
    </intent-filter>
</receiver>
```

### ResultReceiver implementation

```java

public class ResultReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null) return;

        switch (intent.getAction()) {

            case Messages.TRANSACTION_RESULT_ACTION: {
                TransactionResult result = WrapperUtils.getTransactionResultFromJson(
                    intent.getStringExtra(Messages.TRANSACTION_RESULT));
                // Handle approved/declined transaction result
                break;
            }

            case Messages.TRANSACTION_CANCELLED_ACTION: {
                // Transaction was cancelled before completion
                break;
            }

            case Messages.TRANSACTION_STATUS_ACTION: {
                String status = intent.getStringExtra(Messages.TRANSACTION_STATUS);
                String uti    = intent.getStringExtra(Messages.TRANSACTION_UTI);
                // Update UI with in-progress status
                break;
            }

            case Messages.VOID_RESULT_ACTION: {
                boolean voided = intent.getBooleanExtra(Messages.VOID_RESULT, false);
                String uti     = intent.getStringExtra(Messages.TRANSACTION_UTI);
                break;
            }

            case Messages.END_OF_DAY_RESULT_ACTION: {
                String eod = intent.getStringExtra(Messages.END_OF_DAY_RESULT);
                break;
            }

            case Messages.CONFIG_RESULT_ACTION: {
                Config config = WrapperUtils.getConfigFromJson(
                    intent.getStringExtra(Messages.CONFIG_RESULT));
                break;
            }

            case Messages.ACTION_CORE_FAILED: {
                // Core failed to start — show an error to the user
                break;
            }
        }
    }
}
```

### Wrapper library

Add the Rapyd wrapper library to your Gradle dependencies. The wrapper provides the `Api`, `Messages`, `Parameters`, and `TransactionType` classes used throughout this guide.

```json

dependencies {
    implementation 'net.rapyd:rapyd_pax_pos_wrapper:<version>'
}
```
