Code Monkey home page Code Monkey logo

react-native-discovery's Introduction

Discovery

Discover nearby devices using BLE.

React native implementation of https://github.com/omergul123/Discovery

(Android uses https://github.com/joshblour/discovery-android)

Changes from version 0.0.x

Now supports discovery with multiple UUIDs. You need to intialize each one separately and specify the UUID when you perform actions. i.e. Discovery.setShouldAdvertise(true); now becomes Discovery.setShouldAdvertise("3E1180E5-222E-43E9-98B4-E6C0DD18E728", true);

What

Discovery is a very simple but useful library for discovering nearby devices with BLE(Bluetooth Low Energy) and for exchanging a value (kind of ID or username determined by you on the running app on peer device) regardless of whether the app on peer device works at foreground or background state.

Example

const {DeviceEventEmitter} = require('react-native');
const Discovery = require('react-native-discovery');
const myUUID = "3E1180E5-222E-43E9-98B4-E6C0DD18E728";

Discovery.initialize(
  myUUID,
  "SpacemanSpiff"
);
Discovery.setShouldAdvertise(myUUID, true);
Discovery.setShouldDiscover(myUUID, true);

// Listen for discovery changes
DeviceEventEmitter.addListener(
  'discoveredUsers',
  (data) => {
    if (data.uuid == myUUID) {
      if (data.didChange || data.usersChanged) { //slight callback discrepancy between the iOS and Android libraries
        console.log(data.users)
      }
    }
  }
);

// Listen for bluetooth state changes
DeviceEventEmitter.addListener(
  'bleStateChanged',
  (event) => {
    console.log('BLE is On: ' + event.isOn)
  }
);

API

initialize(uuid, username) - string, string. Initialize the Discovery object with a UUID specific to your app, and a username specific to your device. Returns a promise which resolves to the specified UUID

setPaused(uuid, isPaused) - string, bool. pauses advertising and detection for the specified uuid. Returns a promise which resolves to true.

setShouldDiscover(uuid, shouldDiscover) - string, bool. starts and stops discovery for the specified uuid. Returns a promise which resolves to true.

setShouldAdvertise(uuid, shouldAdvertise) - string, bool. starts and stops advertising for the specified uuid. Returns a promise which resolves to true.

setUserTimeoutInterval(uuid, userTimeoutInterval) - string, integer in seconds (default is 5). After not seeing a user for x seconds, we remove him from the users list in our callback (for the specified uuid). Returns a promise which resolves to true.

The following two methods are specific to the Android version, since the Android docs advise against continuous scanning. Instead, we cycle scanning on and off. This also allows us to modify the scan behaviour when the app moves to the background.

setScanForSeconds(uuid, scanForSeconds) - string, integer in seconds (default is 5). This parameter specifies the duration of the ON part of the scan cycle for the specified uuid. Returns a promise which resolves to true.

setWaitForSeconds(uuid, waitForSeconds) - string, integer in seconds (default is 5). This parameter specifies the duration of the OFF part of the scan cycle for the specified uuid. Returns a promise which resolves to true.

Setup

npm install --save react-native-discovery

iOS

  • Run open node_modules/react-native-discovery
  • Drag ReactNativeDiscovery.xcodeproj into your Libraries group

Android

Step 1 - Update Gradle Settings
// file: android/settings.gradle
...

include ':react-native-discovery'
project(':react-native-discovery').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-discovery/android')
Step 2 - Update Gradle Build
// file: android/app/build.gradle
...

dependencies {
    ...
    compile project(':react-native-discovery')
}
Step 3 - Register React Package
...
import com.joshblour.reactnativediscovery.ReactNativeDiscoveryPackage; // <--- import

public class MainActivity extends ReactActivity {

    ...

    @Override
    protected List<ReactPackage> getPackages() {
        return Arrays.<ReactPackage>asList(
            new MainReactPackage(),
            new ReactNativeDiscoveryPackage(this) // <------ add the package
        );
    }

    ...
}

react-native-discovery's People

Contributors

danielsundman avatar yonahforst avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-native-discovery's Issues

incompatible types: <anonymous ReactNativeHost> cannot be converted to Activity

i am trying to create a advertising ble peripheral in react-native 0.40 and react-native-discovery "0.0.4", version. when using react-native run-android, i am getting the below build error in the MainApplication.java

MainApplication.java:36: error: incompatible types: cannot be converted to Activity
new ReactNativeDiscoveryPackage(this)

if i remove this parameter, i am getting the below error.

error: constructor ReactNativeDiscoveryPackage in class ReactNativeDiscoveryPackage cannot be applied to given types;
new ReactNativeDiscoveryPackage()
^
required: Activity
found: no arguments
reason: actual and formal argument lists differ in length
1 error

can you please look at it and let me know how to proceed.

Android doesn't support discovery with multiple UUIDs.

discovery-android is not support multiple UUIDs.
I got this error.

ReactNativeDiscovery.setShoudAdvertise got 2 arguments, expected 1

My code is below.

Discovery.setShouldAdvertise(myUUID, true);
Discovery.setShouldDiscover(myUUID, true);

Work around:

I modified android/src/main/java/com/joshblour/reactnativediscovery/ReactNativeDiscoveryModule.java like below.

https://github.com/yonahforst/react-native-discovery/blob/master/android/src/main/java/com/joshblour/reactnativediscovery/ReactNativeDiscoveryModule.java#L138-L149

    /**
     * Changing these properties will start/stop advertising/discovery
     */
    @ReactMethod
    public void setShouldAdvertise(String _uuid, Boolean shouldAdvertise) {
        mDiscovery.setShouldAdvertise(shouldAdvertise);
    }

    @ReactMethod
    public void setShouldDiscover(String _uuid, Boolean shouldDiscover) {
        mDiscovery.setShouldDiscover(shouldDiscover);
    }

connecting to mac address

Is there any documentation on connection to a specific mac address via react-discovery?

Sorry if I missed something when poking around. Thanks

ReactNativeDiscovery.setShouldDiscover was called with 2 arguments, but expects 1.

I used your example in a simple test app and got this error:

[error][tid:main][RCTModuleMethod.m:470] ReactNativeDiscovery.setShouldDiscover was called with 2 arguments, but expects 1. If you haven't changed this method yourself, this usually means that your versions of the native code and JavaScript code are out of sync. Updating both should make this error go away.

If I use (true) instead of (myUUID, true), no errors appear but the app does not work. I installed the app via testflight on a iOS device and tried to find another device which is connected to Xcode for logging, but the console remains empty.

Build issues in iOS

Followed the steps as instructed.

Build Failed showing 3 errors
1- Utility file not found
2- Unknown type namespace
3- Expected ; after top level declarator.

Package Error ?

Hello,

I'm trying to build a simple proof of concept using discovery, however after following the setup when i try to run my app i'm getting the following compile error :

Project with path ':discovery' could not be found in project ':react-native-discovery'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.