OpenPods icon indicating copy to clipboard operation
OpenPods copied to clipboard

Added sending broadcast function for integration with other apps

Open reesque opened this issue 1 year ago • 2 comments

I wanted to have Airpod integration in my own custom launcher and this seems to be a nice way to do so. I appreciate the community's effort in reverse engineering this :+1:

Edit: Updated README to reflect this change.

Usage:

Intent parameters

public static final String ACTION_STATUS = "com.dosse.airpods.status";
public static final String EXTRA_IS_ALL_DISCONNECTED = "isAllDisconnected";
public static final String EXTRA_MODEL = "model";
public static final String EXTRA_IS_SINGLE = "isSingle";
public static final String EXTRA_LEFT_POD_STATUS = "leftPodStatus";
public static final String EXTRA_RIGHT_POD_STATUS = "rightPodStatus";
public static final String EXTRA_POD_CASE_STATUS = "caseStatus";
public static final String EXTRA_LEFT_POD_IN_EAR = "leftPodInEar";
public static final String EXTRA_RIGHT_POD_IN_EAR = "rightPodInEar";
public static final String EXTRA_SINGLE_POD_STATUS = "singlePodStatus";
public static final String EXTRA_LEFT_POD_CHARGING = "isLeftPodCharging";
public static final String EXTRA_RIGHT_POD_CHARGING = "isRightPodCharging";
public static final String EXTRA_POD_CASE_CHARGING = "isCaseCharging";
public static final String EXTRA_SINGLE_POD_CHARGING = "isSinglePodCharging";

AndroidManifest.xml

<receiver android:name=".AirpodReceiver"
    android:exported="true"
    android:permission="com.dosse.airpods.permission.ACCESS_AIRPOD_INFORMATION">
    <intent-filter>
        <action android:name="com.dosse.airpods.status"/>
    </intent-filter>
</receiver>

Check and request permission

if (checkSelfPermission(context, "com.dosse.airpods.permission.ACCESS_AIRPOD_INFORMATION") == PackageManager.PERMISSION_DENIED) {
    context.requestPermissions(new String[]{"com.dosse.airpods.permission.ACCESS_AIRPOD_INFORMATION"}, 201);
}

Receiver

public class AirpodReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION_STATUS)) {
           // Do something with "intent.getExtras()" here
        }
    }
}

Register Receiver

IntentFilter airpodFilter = new IntentFilter(ACTION_STATUS);
AirpodReceiver airpodReceiver = new AirpodReceiver();
registerReceiver(airpodReceiver, airpodFilter);

reesque avatar May 06 '24 22:05 reesque

Maybe work with permission would be better. https://developer.android.com/develop/background-work/background-tasks/broadcasts#restrict-broadcasts-permissions

seasonyuu avatar May 23 '24 03:05 seasonyuu

Added a custom permission, since Bluetooth LE permission, Location permission, etc... have already been handled by OpenPods

reesque avatar May 23 '24 18:05 reesque