Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Android Functions #12

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
190 changes: 133 additions & 57 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@

# react-native-zebra-bluetooth-printer

## Getting started

`$ npm install react-native-zebra-bluetooth-printer --save`



### Mostly automatic installation

`$ react-native link react-native-zebra-bluetooth-printer`
Expand All @@ -15,7 +12,6 @@ Note : For react-native > 0.59, don't use above command it uses auto-linking.

### Manual installation


#### iOS

1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]`
Expand All @@ -26,105 +22,185 @@ Note : For react-native > 0.59, don't use above command it uses auto-linking.
#### Android

1. Open up `android/app/src/main/java/[...]/MainActivity.java`
- Add `import com.reactlibrary.RNZebraBluetoothPrinterPackage;` to the imports at the top of the file
- Add `new RNZebraBluetoothPrinterPackage()` to the list returned by the `getPackages()` method

- Add `import com.reactlibrary.RNZebraBluetoothPrinterPackage;` to the imports at the top of the file
- Add `new RNZebraBluetoothPrinterPackage()` to the list returned by the `getPackages()` method

2. Append the following lines to `android/settings.gradle`:
```
include ':react-native-zebra-bluetooth-printer'
project(':react-native-zebra-bluetooth-printer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-zebra-bluetooth-printer/android')
```
```
include ':react-native-zebra-bluetooth-printer'
project(':react-native-zebra-bluetooth-printer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-zebra-bluetooth-printer/android')
```
3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
```
compile project(':react-native-zebra-bluetooth-printer')
```
```
compile project(':react-native-zebra-bluetooth-printer')
```

### Update Android Manifest

```
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
```

## Usage

# RNZebraBluetoothPrinter

RNZebraBluetoothPrinter is a module for Bluetooth management and supports print functionality for zebra bluetooth printers ( only ble devices ).
RNZebraBluetoothPrinter is a module for Bluetooth management and supports print functionality for zebra bluetooth printers ( only ble devices ).
It includes features like bluetooth enable/disable, pair/unpair a BLE/Bluetooth device, scan for nearby bluetooth devices and printing using bluetooth.
```javascript
import RNZebraBluetoothPrinter from 'react-native-zebra-bluetooth-printer';

```javascript
import RNZebraBluetoothPrinter from "react-native-zebra-bluetooth-printer";
```

1. isEnabledBluetooth == > async function, check the status of bluetooth service in the bluetooth client(mobile phone) .Returns true if already enabled, false if not enabled.

```javascript
RNZebraBluetoothPrinter.isEnabledBluetooth().then((res) => {
//do something with res
})
//do something with res
});
```

2. enableBluetooth == > async function,
Android: requests for bluetooth on/off permission on the android device.
iOS: resolves to nil.
Android: requests for bluetooth on/off permission on the android device.
iOS: resolves to nil.

```javascript
RNZebraBluetoothPrinter.enableBluetooth().then((res) => {
//do something with res
})
//do something with res
});
```

3. disableBluetooth == > async function,
Android: disables bluetooth if bluetooth is switched on.
iOS: simply resolves by nil.
Android: disables bluetooth if bluetooth is switched on.
iOS: simply resolves by nil.

```javascript
RNZebraBluetoothPrinter.disableBluetooth().then((res) => {
//do something with res
})
```
//do something with res
});
```

4. scanDevices == > async function, scans for available nearby bluetooth devices for a specific period of time.

```javascript
RNZebraBluetoothPrinter.scanDevices().then((deviceArray) => {
//do something with res
})
```
5. pairedDevices == > async function,
Android: returns already paired devices.
iOS: resolves to nil.
//do something with res
});
```

5. pairedDevices == > async function,
Android: returns already paired devices.
iOS: resolves to nil.

```javascript
RNZebraBluetoothPrinter.pairedDevices().then((deviceArray) => {
//do something with deviceArray
})
```
//do something with deviceArray
});
```

6. connectDevice == > async function, for both android and iOS

```javascript
RNZebraBluetoothPrinter.connectDevice(deviceAddress).then((res) => {
//do something with res
//for android, device address is mac address
//for iOS, device address is a long string like 0C347F9F-2881-9CCB-43B0-205976944626
})
```
//do something with res
//for android, device address is mac address
//for iOS, device address is a long string like 0C347F9F-2881-9CCB-43B0-205976944626
});
```

7. unpairDevice == > async function,
Android: unpair/disconnect a paired device from paired device list.
Android: unpair/disconnect a paired device from paired device list.

```javascript
RNZebraBluetoothPrinter.unpairDevice(deviceAddress).then((res) => {
//do something with res
})
//do something with res
});
```
iOS: function resolves to nil.
8. print == > async function, prints specific zpl string from a zebra printer for both android and iOS. CPCL strings can also be printed using this for Android.

For example :
```javascript
const zpl = "^XA^FX Top section with company logo, name and address.^CF0,60^FO50,50^GB100,100,100^FS^ FO75,75 ^ FR ^ GB100, 100, 100 ^ FS^ FO88, 88 ^ GB50, 50, 50 ^ FS ^XZ";
iOS: function resolves to nil.

8. print == > async function, prints specific zpl string from a zebra printer for both android and iOS. CPCL strings can also be printed using this for Android.

```javascript
const zpl =
"^XA^FX Top section with company logo, name and address.^CF0,60^FO50,50^GB100,100,100^FS^ FO75,75 ^ FR ^ GB100, 100, 100 ^ FS^ FO88, 88 ^ GB50, 50, 50 ^ FS ^XZ";
```

Android

```javascript
RNZebraBluetoothPrinter.print(deviceAddress,zpl).then((res) => {
//do something with res
})
RNZebraBluetoothPrinter.print(deviceAddress, zpl).then((res) => {
//do something with res
});
```

iOS

```javascript
RNZebraBluetoothPrinter.print(zpl).then((res) => {
//do something with res
});
```

9. isConnected == > async function, returns a boolean value to indicate whether or not there is an open connection.
For example :

Android

```javascript
const isConnected = await RNZebraBluetoothPrinter.isConnected();
```

10. getPrinterControlLanguage == > async function, returns a String containing the connected printer language.
For example :

Android

```javascript
RNZebraBluetoothPrinter.print(zpl).then((res)=>{
//do something with res
})
```

const tags = {
ZPL: "...",
CPCL: "...",
PDF: "...",
};

const printerLanguage =
await RNZebraBluetoothPrinter.getPrinterControlLanguage();

await RNZebraBluetoothPrinter.print(tags[printerLanguage]);
```

### Fast Print - [Android only]

You can control the start and end of the connection for faster printing. For this to work, you need to open the connection at the beginning of your code, and close it only at the end of the whole process. An example would be:

- I open the connection when starting the screen, print all the labels that are requested, and finally close the connection.
- The fastPrint function will print to the connected printer.

```javascript
...

useEffect(() => {
const connectPrinter = async (device) => {
await RNZebraBluetoothPrinter.connect(device.address);
}

if(device){
connectPrinter(device);
}

return () => RNZebraBluetoothPrinter.disconnect();
}, [device])

...

const printTags = async (quantity) => {
for(let i=0; i<quantity; i++){
await RNZebraBluetoothPrinter.fastPrint("...");
}
}

...
```
Loading