なんとか自己解決しました
以下がコードになります
javascript
1import React, { Component } from 'react';//コンポーネントをインストール
2import { NativeModules, NativeEventEmitter } from 'react-native';
3import { Text, View, Image, StyleSheet,Button,FlatList } from 'react-native'//コンポーネントを指定してインストール
4import styles from './styles'//スタイルシートを読み込み
5import BleManager from 'react-native-ble-manager';//ble-managerをインストール
6
7const BleManagerModule = NativeModules.BleManager;
8const bleManagerEmitter = new NativeEventEmitter(NativeModules.BleManager);
9var connectflag = new Boolean(true);
10
11class MainScreen extends React.Component {
12
13 //bt_statusオブジェクトとperipheralListオブジェクトの初期値割当
14 state = {
15 bt_status: 'off',
16 peripheralList: [],
17 }
18
19 constructor(){
20 super()
21 this.handleDiscoverPeripheral = this.handleDiscoverPeripheral.bind(this);
22 }
23
24 //コンポーネント(アプリの部品)がマウント(操作可能な状態)された直後に発動するクラス
25 componentDidMount() {
26 BleManager.start({showAlert: false})//BleManagerを起動
27 .then(() => {//正常に起動できたら
28 console.log('BleManager initialized');//consoleに左記を表示
29
30 bleManagerEmitter.addListener(//リスナー(イベント時に発動する関数)の登録
31 'BleManagerDidUpdateState',//BleManager(Blutooth)のon/off状態が変化した時
32 (args) => {
33 //setStateで更新して再レンダリングしてBluetoothの状態表示を更新
34 this.setState({bt_status: args.state})
35 }
36 );
37
38 bleManagerEmitter.addListener(//リスナー(イベント時に発動する関数)の登録
39 'BleManagerDiscoverPeripheral',//BLEデバイスを発見した時
40 (args) => {
41 /*peripheralオブジェクトのidとnameプロパティに発見したBLEデバイスのidと名前を入れる*/
42 //idはUUIDが入ってるがnameは未定義
43 peripheral = { 'id': args.id, 'name': args.name };
44 //peripheralListにperipheralオブジェクトを要素として追加する
45 this.state.peripheralList.push(peripheral);
46 //setStateで更新して再レンダリングしてリストを更新
47 this.setState(this.state.peripheralList);
48
49 }
50 );
51
52 //handleDiscoverPeripheralに処理が飛ぶ
53 this.handlerDiscover = bleManagerEmitter.addListener('BleManagerDiscoverPeripheral', this.handleDiscoverPeripheral );
54
55 BleManager.checkState()//モジュールにBLEの状態をチェックさせ、
56 //BleManagerDidUpdateStateイベントをトリガーする
57 //トリガーとは任意のタイミングでイベント処理を実行させること
58
59 })
60 .catch((error) => {//起動できなかったら
61 console.log(error)//コンソールにエラーを表示
62 });
63 }
64
65 //クラス名は任意、BLEデバイスをスキャンする処理
66 scanBLED() {
67 //BleMnagerを使ってBLEデバイスをスキャンする
68 //第二引数がスキャンする秒数となる
69 BleManager.scan([], 5, false)
70 .then(() => {//スキャンに成功したら
71 console.log('Scan started');//コンソールに左記を表示する
72 this.setState({peripheralList: []});//BLEデバイスリストを初期化する
73 connectflag=true;
74 })
75 .catch((error) => {//スキャンに失敗したら
76 console.log(error);//コンソールにエラーを表示する
77 });
78 }
79
80 //ここでスキャンしたデバイスに接続する
81 handleDiscoverPeripheral(peripheral){
82 //if(connectflag){
83 //peripheralの持ってるデータの確認
84 //console.log(JSON.stringify(peripheral));
85 alert(JSON.stringify(peripheral.id));//接続したBLEデバイスのUUIDを表示
86
87 //androidはmacID, iosはserviceUUIDが取得できる
88 BleManager.connect(peripheral.id);
89 console.log(peripheral.id);
90 connectflag=false;
91 //}
92 }
93
94 //クラス名は任意、BLEデバイスリストを構成する処理
95 //引数itemは固定で使う(idとnameは引数itemとしてperipheralオブジェクトが入って定義される?)
96 //FlatListに渡すstyle名とItemキーを定義する
97 //Htmlで画面を構成するオブジェクトに対してidとnameを記述するのと同じ
98 renderPeripheral({ item }) {
99 return (
100 <View style={styles.peripheralList}>
101 <Text style={styles.id_text}>{item.id}</Text>
102 <Text style={styles.id_text}>{item.name}</Text>
103 </View>
104 );
105 }
106
107
108 render() {
109 //stateのbt_statusを表示
110 //scanボタンの設置
111 //periphera(BLEデバイス)のリストを表示(FlatListはデータソースとstyle名&Itemキーが必要)
112 //this.scanBLED.bind(this)でscanBLEDをscanボタンにバインド(関連付ける)
113 //this.renderPeripheral.bind(this)でrenderPeripheralをBLEDリストにバインド(関連付ける)
114 return (
115 <View style={styles.container}>
116 <Text style={styles.welcome}>
117 Bluetooth: {this.state.bt_status}
118 </Text>
119 <Button title="Scan" onPress={this.scanBLED.bind(this)} />
120 <FlatList data={this.state.peripheralList} renderItem={this.renderPeripheral.bind(this)} />
121 </View>
122 );
123 }
124
125}
126
127export default MainScreen;
やはりMACアドレスの取得はしないようです
BleManagerDiscoverPeripheral(BLEデバイス発見)トリガーが発動した時にargsというBLEManagerが管理しているであろう謎の引数からUUIDを取得できます
その後、connectメソッドにこのUUIDを渡すことによって接続ができます
コメントをくださったWindさんありがとうございます
確かにMACアドレスを取得するだけなら他にも方法はありそうですね
react-nativeのさらにBLEManagerとなるとマニアックな内容になリます
そのため情報量が少なく大変になると思うので、この回答が誰かの手助けになれば幸いです