Repository: kakzaki/blue_thermal_printer
Branch: master
Commit: d183d1d74111
Files: 81
Total size: 134.5 KB
Directory structure:
gitextract_weax0zck/
├── .github/
│ └── workflows/
│ └── stale.yml
├── .gitignore
├── .gradle/
│ ├── 5.1.1/
│ │ └── gc.properties
│ ├── buildOutputCleanup/
│ │ └── cache.properties
│ └── vcs-1/
│ └── gc.properties
├── .idea/
│ ├── .gitignore
│ ├── caches/
│ │ ├── build_file_checksums.ser
│ │ └── gradle_models.ser
│ ├── codeStyles/
│ │ └── Project.xml
│ ├── encodings.xml
│ ├── libraries/
│ │ ├── Dart_SDK.xml
│ │ ├── Flutter_Plugins.xml
│ │ └── Flutter_for_Android.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── runConfigurations/
│ │ └── example_lib_main_dart.xml
│ └── vcs.xml
├── .metadata
├── CHANGELOG.md
├── LICENSE
├── README.md
├── android/
│ ├── .gitignore
│ ├── build.gradle
│ ├── gradle.properties
│ ├── settings.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ └── java/
│ └── id/
│ └── kakzaki/
│ └── blue_thermal_printer/
│ ├── BlueThermalPrinterPlugin.java
│ ├── PrinterCommands.java
│ └── Utils.java
├── blue_thermal_printer.iml
├── example/
│ ├── .flutter-plugins-dependencies
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── android/
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java/
│ │ │ │ │ └── id/
│ │ │ │ │ └── kakzaki/
│ │ │ │ │ └── blue_thermal_printer_example/
│ │ │ │ │ └── MainActivity.java
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ └── values/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle
│ ├── ios/
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── flutter_export_environment.sh
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ └── Runner.xcworkspace/
│ │ └── contents.xcworkspacedata
│ ├── lib/
│ │ ├── main.dart
│ │ ├── printerenum.dart
│ │ └── testprint.dart
│ ├── pubspec.yaml
│ └── test/
│ └── widget_test.dart
├── gradle.properties
├── ios/
│ ├── .gitignore
│ ├── Assets/
│ │ └── .gitkeep
│ ├── Classes/
│ │ ├── BlueThermalPrinterPlugin.h
│ │ ├── BlueThermalPrinterPlugin.m
│ │ └── SwiftBlueThermalPrinterPlugin.swift
│ └── blue_thermal_printer.podspec
├── lib/
│ └── blue_thermal_printer.dart
├── local.properties
├── macos/
│ ├── Classes/
│ │ ├── BlueThermalPrinterPlugin.h
│ │ └── BlueThermalPrinterPlugin.m
│ └── blue_thermal_printer.podspec
├── pubspec.yaml
└── test/
└── blue_thermal_printer_test.dart
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/stale.yml
================================================
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues and pull requests
on:
schedule:
- cron: '30 20 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.'
stale-pr-message: 'Stale pull request message'
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
================================================
FILE: .gitignore
================================================
.DS_Store
.dart_tool/
.packages
.pub/
build/
================================================
FILE: .gradle/5.1.1/gc.properties
================================================
================================================
FILE: .gradle/buildOutputCleanup/cache.properties
================================================
#Thu May 09 15:59:56 ICT 2019
gradle.version=5.1.1
================================================
FILE: .gradle/vcs-1/gc.properties
================================================
================================================
FILE: .idea/.gitignore
================================================
# Default ignored files
/workspace.xml
================================================
FILE: .idea/codeStyles/Project.xml
================================================
.*:id
http://schemas.android.com/apk/res/android
.*:name
http://schemas.android.com/apk/res/android
.*
http://schemas.android.com/apk/res/android
ANDROID_ATTRIBUTE_ORDER
================================================
FILE: .idea/encodings.xml
================================================
================================================
FILE: .idea/libraries/Dart_SDK.xml
================================================
================================================
FILE: .idea/libraries/Flutter_Plugins.xml
================================================
================================================
FILE: .idea/libraries/Flutter_for_Android.xml
================================================
================================================
FILE: .idea/misc.xml
================================================
================================================
FILE: .idea/modules.xml
================================================
================================================
FILE: .idea/runConfigurations/example_lib_main_dart.xml
================================================
================================================
FILE: .idea/vcs.xml
================================================
================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b
channel: stable
project_type: plugin
================================================
FILE: CHANGELOG.md
================================================
## 1.2.3
* demonstrate using enum for readability
* drawer pin by erica
* fix bug on ios
## 1.2.2
* upgrading gradle
## 1.2.1
* fix android 12 permission
## 1.2.0
* fix web build issue
## 1.1.9
* fix bluetooth listener not working, add additional bluetooth state info, add get connected device function
* Issue #123 fix - app will now automatically disconnect if device is turned off
thanks to knight-dev
## 1.1.8
* Fix bug on ios build
## 1.1.7
* dartdoc comments and Dart formatter
## 1.1.6
* Add print3Column method
* Add print4Column method
* Support format string
## 1.1.5
* Migrate to Android embedding v2
## 1.1.4
* Fix Error Null-Safety
## 1.1.3
* Fix Cast Error on getBondedDevices
## 1.1.2
* Migrate to null-safety
## 1.1.1
* Support different charset in print methods, thanks to danilof
## 1.1.0
* Add print image bytes method, thanks to mvanvu
## 1.0.9
* Avoiding activity null pointer, thanks to wmattei
## 1.0.8
* fix crash with "Methods marked with @UiThread must be executed on the main thread, thanks to ricardochen
## 1.0.7
* change documentation
## 1.0.6
* add size to printleftright
## 1.0.5
* fix bug
## 1.0.4
* fix bug
## 1.0.3
* Add print left + right
## 1.0.2
* Add Endline in QRCODE
## 1.0.1
* Add Doc.
## 1.0.0
* initial release.
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2022 Zaki Mubarok (kakzaki.dev)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# blue_thermal_printer
[](https://pub.dev/packages/blue_thermal_printer)
[](https://twitter.com/kakzaki_id)
A new Flutter plugin for connecting to thermal printer via bluetooth
(Android Only),
this plugin is still under development
Note: Migrate your project to AndroidX
## Platform Support
| Android | iOS | MacOS | Web | Linux | Windows |
| :-----: | :-: | :---: | :-: | :---: | :-----: |
| ✔️ | ️X | ️X | ️X | ️X | ️X |
## Getting Started
1. Depend on it
Add this to your package's pubspec.yaml file:
dependencies:
blue_thermal_printer: ^any
2. Install it
You can install packages from the command line:
with Flutter:
$ flutter packages get
Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.
3. Import it
Now in your Dart code, you can use:
import 'package:blue_thermal_printer/blue_thermal_printer.dart';
EXAMPLE:
For detail demonstration please look at [example](https://github.com/kakzaki/blue_thermal_printer/tree/master/example) folder
Note: make sure to upgrade your project to compileSdkVersion 31 or above
If you like my content, please consider buying me a coffee. Thank you for your support!
[](https://ko-fi.com/Z8Z6656JW)
bagi yang dari Indonesia bisa lewat saweria berikut
https://saweria.co/kakzaki
================================================
FILE: android/.gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
================================================
FILE: android/build.gradle
================================================
group 'id.kakzaki.blue_thermal_printer'
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.4'
}
}
rootProject.allprojects {
repositories {
google()
mavenCentral()
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 31
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
minSdkVersion 18
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
lintOptions {
disable 'InvalidPackage'
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'com.google.zxing:core:3.3.3'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.journeyapps:zxing-android-embedded:3.6.0@aar'
}
================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx1536M
================================================
FILE: android/settings.gradle
================================================
rootProject.name = 'blue_thermal_printer'
================================================
FILE: android/src/main/AndroidManifest.xml
================================================
================================================
FILE: android/src/main/java/id/kakzaki/blue_thermal_printer/BlueThermalPrinterPlugin.java
================================================
package id.kakzaki.blue_thermal_printer;
import android.Manifest;
import android.app.Activity;
import android.app.Application;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.util.Log;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.EventChannel;
import io.flutter.plugin.common.EventChannel.StreamHandler;
import io.flutter.plugin.common.EventChannel.EventSink;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.journeyapps.barcodescanner.BarcodeEncoder;
public class BlueThermalPrinterPlugin implements FlutterPlugin, ActivityAware,MethodCallHandler, RequestPermissionsResultListener {
private static final String TAG = "BThermalPrinterPlugin";
private static final String NAMESPACE = "blue_thermal_printer";
private static final int REQUEST_COARSE_LOCATION_PERMISSIONS = 1451;
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static ConnectedThread THREAD = null;
private BluetoothAdapter mBluetoothAdapter;
private Result pendingResult;
private EventSink readSink;
private EventSink statusSink;
private FlutterPluginBinding pluginBinding;
private ActivityPluginBinding activityBinding;
private final Object initializationLock = new Object();
private Context context;
private MethodChannel channel;
private EventChannel stateChannel;
private BluetoothManager mBluetoothManager;
private Activity activity;
public BlueThermalPrinterPlugin() {
}
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
pluginBinding = binding;
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
pluginBinding = null;
}
@Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
activityBinding = binding;
setup(
pluginBinding.getBinaryMessenger(),
(Application) pluginBinding.getApplicationContext(),
activityBinding.getActivity(),
activityBinding);
}
@Override
public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
}
@Override
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
onAttachedToActivity(binding);
}
@Override
public void onDetachedFromActivity() {
detach();
}
private void setup(
final BinaryMessenger messenger,
final Application application,
final Activity activity,
final ActivityPluginBinding activityBinding) {
synchronized (initializationLock) {
Log.i(TAG, "setup");
this.activity = activity;
this.context = application;
channel = new MethodChannel(messenger, NAMESPACE + "/methods");
channel.setMethodCallHandler(this);
stateChannel = new EventChannel(messenger, NAMESPACE + "/state");
stateChannel.setStreamHandler(stateStreamHandler);
EventChannel readChannel = new EventChannel(messenger, NAMESPACE + "/read");
readChannel.setStreamHandler(readResultsHandler);
mBluetoothManager = (BluetoothManager) application.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
activityBinding.addRequestPermissionsResultListener(this);
}
}
private void detach() {
Log.i(TAG, "detach");
context = null;
activityBinding.removeRequestPermissionsResultListener(this);
activityBinding = null;
channel.setMethodCallHandler(null);
channel = null;
stateChannel.setStreamHandler(null);
stateChannel = null;
mBluetoothAdapter = null;
mBluetoothManager = null;
}
// MethodChannel.Result wrapper that responds on the platform thread.
private static class MethodResultWrapper implements Result {
private final Result methodResult;
private final Handler handler;
MethodResultWrapper(Result result) {
methodResult = result;
handler = new Handler(Looper.getMainLooper());
}
@Override
public void success(final Object result) {
handler.post(() -> methodResult.success(result));
}
@Override
public void error(@NonNull final String errorCode, final String errorMessage, final Object errorDetails) {
handler.post(() -> methodResult.error(errorCode, errorMessage, errorDetails));
}
@Override
public void notImplemented() {
handler.post(methodResult::notImplemented);
}
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result rawResult) {
Result result = new MethodResultWrapper(rawResult);
if (mBluetoothAdapter == null && !"isAvailable".equals(call.method)) {
result.error("bluetooth_unavailable", "the device does not have bluetooth", null);
return;
}
final Map arguments = call.arguments();
switch (call.method) {
case "state":
state(result);
break;
case "isAvailable":
result.success(mBluetoothAdapter != null);
break;
case "isOn":
try {
result.success(mBluetoothAdapter.isEnabled());
} catch (Exception ex) {
result.error("Error", ex.getMessage(), exceptionToString(ex));
}
break;
case "isConnected":
result.success(THREAD != null);
break;
case "isDeviceConnected":
if (arguments.containsKey("address")) {
String address = (String) arguments.get("address");
isDeviceConnected(result, address);
} else {
result.error("invalid_argument", "argument 'address' not found", null);
}
break;
case "openSettings":
ContextCompat.startActivity(context, new Intent(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS),
null);
result.success(true);
break;
case "getBondedDevices":
try {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(activity,
Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(activity,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity,new String[]{
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.ACCESS_FINE_LOCATION,
}, 1);
pendingResult = result;
break;
}
} else {
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED||ContextCompat.checkSelfPermission(activity,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity,
new String[] { Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION }, REQUEST_COARSE_LOCATION_PERMISSIONS);
pendingResult = result;
break;
}
}
getBondedDevices(result);
} catch (Exception ex) {
result.error("Error", ex.getMessage(), exceptionToString(ex));
}
break;
case "connect":
if (arguments.containsKey("address")) {
String address = (String) arguments.get("address");
connect(result, address);
} else {
result.error("invalid_argument", "argument 'address' not found", null);
}
break;
case "disconnect":
disconnect(result);
break;
case "write":
if (arguments.containsKey("message")) {
String message = (String) arguments.get("message");
write(result, message);
} else {
result.error("invalid_argument", "argument 'message' not found", null);
}
break;
case "writeBytes":
if (arguments.containsKey("message")) {
byte[] message = (byte[]) arguments.get("message");
writeBytes(result, message);
} else {
result.error("invalid_argument", "argument 'message' not found", null);
}
break;
case "printCustom":
if (arguments.containsKey("message")) {
String message = (String) arguments.get("message");
int size = (int) arguments.get("size");
int align = (int) arguments.get("align");
String charset = (String) arguments.get("charset");
printCustom(result, message, size, align, charset);
} else {
result.error("invalid_argument", "argument 'message' not found", null);
}
break;
case "printNewLine":
printNewLine(result);
break;
case "paperCut":
paperCut(result);
break;
case "drawerPin2":
drawerPin2(result);
break;
case "drawerPin5":
drawerPin5(result);
break;
case "printImage":
if (arguments.containsKey("pathImage")) {
String pathImage = (String) arguments.get("pathImage");
printImage(result, pathImage);
} else {
result.error("invalid_argument", "argument 'pathImage' not found", null);
}
break;
case "printImageBytes":
if (arguments.containsKey("bytes")) {
byte[] bytes = (byte[]) arguments.get("bytes");
printImageBytes(result, bytes);
} else {
result.error("invalid_argument", "argument 'bytes' not found", null);
}
break;
case "printQRcode":
if (arguments.containsKey("textToQR")) {
String textToQR = (String) arguments.get("textToQR");
int width = (int) arguments.get("width");
int height = (int) arguments.get("height");
int align = (int) arguments.get("align");
printQRcode(result, textToQR, width, height, align);
} else {
result.error("invalid_argument", "argument 'textToQR' not found", null);
}
break;
case "printLeftRight":
if (arguments.containsKey("string1")) {
String string1 = (String) arguments.get("string1");
String string2 = (String) arguments.get("string2");
int size = (int) arguments.get("size");
String charset = (String) arguments.get("charset");
String format = (String) arguments.get("format");
printLeftRight(result, string1, string2, size, charset,format);
} else {
result.error("invalid_argument", "argument 'message' not found", null);
}
break;
case "print3Column":
if (arguments.containsKey("string1")) {
String string1 = (String) arguments.get("string1");
String string2 = (String) arguments.get("string2");
String string3 = (String) arguments.get("string3");
int size = (int) arguments.get("size");
String charset = (String) arguments.get("charset");
String format = (String) arguments.get("format");
print3Column(result, string1, string2,string3, size, charset,format);
} else {
result.error("invalid_argument", "argument 'message' not found", null);
}
break;
case "print4Column":
if (arguments.containsKey("string1")) {
String string1 = (String) arguments.get("string1");
String string2 = (String) arguments.get("string2");
String string3 = (String) arguments.get("string3");
String string4 = (String) arguments.get("string4");
int size = (int) arguments.get("size");
String charset = (String) arguments.get("charset");
String format = (String) arguments.get("format");
print4Column(result, string1, string2,string3,string4, size, charset,format);
} else {
result.error("invalid_argument", "argument 'message' not found", null);
}
break;
default:
result.notImplemented();
break;
}
}
/**
* @param requestCode requestCode
* @param permissions permissions
* @param grantResults grantResults
* @return boolean
*/
@Override
public boolean onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_COARSE_LOCATION_PERMISSIONS) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getBondedDevices(pendingResult);
} else {
pendingResult.error("no_permissions", "this plugin requires location permissions for scanning", null);
pendingResult = null;
}
return true;
}
return false;
}
private void state(Result result) {
try {
switch (mBluetoothAdapter.getState()) {
case BluetoothAdapter.STATE_OFF:
result.success(BluetoothAdapter.STATE_OFF);
break;
case BluetoothAdapter.STATE_ON:
result.success(BluetoothAdapter.STATE_ON);
break;
case BluetoothAdapter.STATE_TURNING_OFF:
result.success(BluetoothAdapter.STATE_TURNING_OFF);
break;
case BluetoothAdapter.STATE_TURNING_ON:
result.success(BluetoothAdapter.STATE_TURNING_ON);
break;
default:
result.success(0);
break;
}
} catch (SecurityException e) {
result.error("invalid_argument", "Argument 'address' not found", null);
}
}
/**
* @param result result
*/
private void getBondedDevices(Result result) {
List