質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

2323閲覧

AndroidStudioによるビーコンのUnityPlugin作成について

tanamochi

総合スコア83

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/02/15 04:14

いつもお世話になっております。
毎度恐縮ですが質問させていただきます。

###前提・実現したいこと
altbeaconを使ってビーコンの検出をするアプリをAndroidStudioで作成したのですがこれをUnityのプラグインに変換しUnityから呼べるようにしたいです。
ひとまず起動時にToastを行うテストをしています。

###発生している問題・エラーメッセージ
ビルド後アプリが2つ生成されUnityの画面が表示
タスクキルをした後に片方のアプリを起動するとToastの表示がされる真っ黒な画面が表示
設定/アプリ からリストを見るとアプリ自体は一つとして認識されている

###該当のソースコード

NativeBLE.java

java

1package com.example.ble; 2 3import android.app.Activity; 4import android.app.Notification; 5import android.app.NotificationManager; 6import android.bluetooth.BluetoothAdapter; 7import android.bluetooth.BluetoothManager; 8import android.content.Context; 9import android.net.Uri; 10import android.os.Bundle; 11import android.os.RemoteException; 12import android.util.Log; 13import android.widget.Toast; 14 15import com.unity3d.player.UnityPlayer; 16import com.unity3d.player.UnityPlayerActivity; 17 18import org.altbeacon.beacon.Beacon; 19import org.altbeacon.beacon.BeaconConsumer; 20import org.altbeacon.beacon.BeaconManager; 21import org.altbeacon.beacon.BeaconParser; 22import org.altbeacon.beacon.MonitorNotifier; 23import org.altbeacon.beacon.RangeNotifier; 24import org.altbeacon.beacon.Region; 25 26import java.util.Collection; 27 28 29public class NativeBLE extends UnityPlayerActivity implements BeaconConsumer { 30 // BeaconConsumerインターフェースを実装 31 private static String TAG = "AltBeacon Sample"; 32 // BeaconManagerクラスの変数を定義 33 private BeaconManager beaconManager; 34 35 // iBeaconのデータを認識するためのParserフォーマット 36 public static final String IBEACON_FORMAT = "m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"; 37 38 private String mUUID = ""; 39 40 // defined somewhere 41 private int number = 0; 42 43 @Override 44 protected void onCreate(Bundle savedInstanceState) { 45 super.onCreate(savedInstanceState); 46 47 Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show(); 48 49 // staticメソッドでBeaconManagerクラスのインスタンスを取得 50 beaconManager = BeaconManager.getInstanceForApplication(this); 51 // BeaconParseをBeaconManagerに設定 52 beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(IBEACON_FORMAT)); 53 54 final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE); 55 final BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter(); 56 if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) { 57 Log.e("BLE_TEST", "No available Bluetooth adapter."); 58 } 59 } 60 61 @Override 62 public void onBeaconServiceConnect() { 63 // BeaconManagerクラスのモニタリング設定 64 beaconManager.addMonitorNotifier(new MonitorNotifier() { 65 @Override 66 public void didEnterRegion(Region region) { 67 // 領域侵入時に実行 68 Log.d(TAG, "didEnterRegion"); 69 addNotification("beacon", "発見しました"); 70 71 try { 72 // レンジングの開始 73 beaconManager.startRangingBeaconsInRegion(new Region("ycBEACON", null, null, null)); 74 } catch (RemoteException e) { 75 // 例外が発生した場合 76 e.printStackTrace(); 77 } 78 } 79 80 @Override 81 public void didExitRegion(Region region) { 82 // 領域退出時に実行 83 Log.d(TAG, "didExitRegion"); 84 addNotification("beacon", "見失いました"); 85 86 try { 87 // レンジングの停止 88 beaconManager.stopRangingBeaconsInRegion(new Region("ycBEACON", null, null, null)); 89 } catch (RemoteException e) { 90 // 例外が発生した場合 91 e.printStackTrace(); 92 } 93 } 94 95 @Override 96 public void didDetermineStateForRegion(int i, Region region) { 97 98 } 99 }); 100 101 // BeaconManagerクラスのレンジング設定 102 beaconManager.addRangeNotifier(new RangeNotifier() { 103 @Override 104 public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 105 // 検出したビーコンの情報を全部Logに書き出す 106 for (Beacon beacon : beacons) { 107 Log.d(TAG, "UUID:" + beacon.getId1() + ", major:" + beacon.getId2() + ", minor:" + beacon.getId3() + ", Distance:" + beacon.getDistance() + ",RSSI" + beacon.getRssi() + ", TxPower" + beacon.getTxPower()); 108 mUUID = beacon.getBluetoothAddress(); 109 } 110 } 111 }); 112 113 try { 114 // モニタリングの開始 115 beaconManager.startMonitoringBeaconsInRegion(new Region("ycBEACON", null, null, null)); 116 } catch (RemoteException e) { 117 e.printStackTrace(); 118 } 119 } 120 121 @Override 122 protected void onPause() { 123 super.onPause(); 124// beaconManager.unbind(this); 125 Log.d(TAG, "background"); 126 } 127 128 @Override 129 protected void onResume() { 130 super.onPause(); 131 beaconManager.bind(this); 132 } 133 134 @Override 135 public void onStart() { 136 super.onStart(); 137 } 138 139 @Override 140 public void onStop() { 141 super.onStop(); 142 } 143 144 public void addNotification(String title, String msg){ 145 // notification 146 NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 147 148 Notification n = new Notification.Builder(NativeBLE.this) 149 .setContentTitle(title) 150 .setContentText(msg) 151 .setSmallIcon(R.drawable.test) 152 .build(); 153 154 nm.notify(number, n); 155 ++number; 156 }

gradle

apply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 21 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'org.altbeacon:android-beacon-library:2.9' } android.libraryVariants.all{ variant-> variant.outputs.each{output-> output.packageLibrary.exclude('libs/classes.jar') } } task copyLibs(type: Copy) { from configurations.compile into 'build/outputs/aar' exclude { details -> details.file.name.endsWith(".jar") } }

AndroidManifest.xml(Unity,Androidともに同じ内容)

xml

1<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.ble"> 2 3 <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/> 4 5 <uses-permission android:name="android.permission.BLUETOOTH" /> 6 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 7 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 8 9 <application android:allowBackup="true" android:label="@string/app_name" 10 android:supportsRtl="true"> 11 <activity android:name=".NativeBLE" 12 android:label="@string/app_name" 13 android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN" /> 16 <category android:name="android.intent.category.LAUNCHER" /> 17 </intent-filter> 18 </activity> 19 </application> 20 21</manifest>

Unityには記載なし

###試したこと

  1. AnddroidStudioの右ペインより

gradle/Tasks/build/assembleからaarファイルを作成
gradle/other/copylibsから依存関係のaarファイルを作成

  1. UnityのPlugin/Androidフォルダに上記aarファイル、およびAndroidManifestを配置

  2. Unityビルドを行い実機確認

###補足情報(言語/FW/ツール等のバージョンなど)
AndroidStudio2.2.3
Unity5.3.5f1

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問