【Xamarin】【Android】Broadcastを受け取る
Xamarin.AndroidでBroadcast(同報信号)を受け取るための方法です.いろんなデータがBroadcastされているようですね.
今回はとりあえずバッテリーのデータを受け取ってみようと思います.
環境
僕の開発環境です.
- Xperia XZ1
- Android 9.0
- Xamarin.Android
- Visual Studio for mac
レシーバーの実装
Broadcastを受け取るには,BroadcastReceiver
を継承したclassを実装する必要があります.とりあえずコードを書いていきましょう.....と言いたいところですが,Visual Studio(for mac)では,コンテキストメニューから直接BroadcastReceiverを継承したclassを生成することができます.
プロジェクトを右クリック > 追加 > 新しいファイル > Android > ブロードキャストレシーバー > 新規
はい.これだけで受信するためのclassは完成です.何ともあっけない.....
本来であれば,AndroidManifest.xml
に記述する必要があるのですが,この方法ではそれが必要ありません.便利な世の中になりましたね.
念のために実際のコードを
using Android.Content;
using Android.OS;
using Android.Widget;
namespace ReceiverSample {
[BroadcastReceiver]
public class receiver : Android.Content.BroadcastReceiver {
public override void OnReceive(Context context, Intent intent) {
Toast.MakeText(context, "Received intent!", ToastLength.Short).Show();
// intentの種類を判別
if(intent.Action == Intent.ActionBatteryChanged) {
// データ付きintentとしてバッテリー情報が与えられる
MainActivity.Update(intent.GetIntExtra(BatteryManager.ExtraLevel, -1 ));
}
}
}
}
レシーバの登録
次に,レシーバを登録してあげる必要があります.簡単です.とりあえずコードを見てみましょう.
using Android.App;
using Android.OS;
using Android.Runtime;
using Android.Content;
using Android.Support.V7.App;
using Android.Widget;
namespace ReceiverSample {
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity {
static TextView tv;
protected override void OnCreate(Bundle savedInstanceState) {
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
SetContentView(Resource.Layout.activity_main);
tv = FindViewById(Resource.Id.tv1);
receiver receiver = new receiver(); // receiverのインスタンスを作成
IntentFilter filter = new IntentFilter(); // Intentのフィルタを作成(BroadcastはIntentで飛んでくる)
filter.AddAction(Intent.ActionBatteryChanged); // フィルタの設定
RegisterReceiver(receiver, filter); // receiverを登録
}
public static void Update(int _level) {
tv.Text = _level.ToString() + "%";
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) {
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
レイアウト
念のためにレイアウトも載せとく.
実行結果

最近のコメント