manahiyoの気まぐれ

備忘録を兼ねたブログです。

UNITYからRTL-SDRを使ってみる

はじめに

以前紹介したとおり、AndrouidStudioからはRTL-SDRを使用できたが、今回はUNITYから使用してみたいと思い、挑戦する。

 

ポイントはドライバーの呼び出しができるかどうかというところ

 

やってみる

 

AndroidStudioでは下記のようなコードで呼び出していた

            Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("marto.rtl_tcp_andro", "com.sdrtouch.rtlsdr.DeviceOpenActivity");
intent.setData(Uri.parse("iqsrc://-a 0.0.0.0 -p 1234 -n 1"));
startActivityForResult(intent, RTL2832U_RESULT_CODE);

 

UNITYではどうなるか、intentで検索して、下記が参考になった

naichilab.blogspot.com

shinobu-siv.hatenadiary.org

 

この後("currentActivity")でフィールドが見つからないと

エラーになってしまったが、無視してビルドなどしていたら

なぜかエラーは出なくなった?・・・問題ないかはまだ不明

 

さらにエラーが続き、下記を参考に構築しなおし

stackoverflow.com

 

下記の通りドライバーが読み込めた

f:id:manahiyo831:20201128142606p:plain

 

結果は下記の通り

AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject Activity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent");
//intent.setClassName("marto.rtl_tcp_andro", "com.sdrtouch.rtlsdr.DeviceOpenActivity");
intent.Call<AndroidJavaObject>("setClassName", "marto.rtl_tcp_andro", "com.sdrtouch.rtlsdr.DeviceOpenActivity");
//intent.setData(Uri.parse("iqsrc://-a 0.0.0.0 -p 1234 -n 1"));
string url = "iqsrc://-a 0.0.0.0 -p 1234 -n 1";
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriData = uriClass.CallStatic<AndroidJavaObject>("parse", url);
intent.Call<AndroidJavaObject>("setData", uriData);
Activity.Call("startActivity", intent);

 

これでUNITYからRTL-SDRが使えそう