C# で Android開発
Androidアプリ開発の本を見ながら、C# で開発してみる。
今回は Chapter 6 まで。苦労した・・・。
まだまだ全然前半戦なのに、先が思いやられる。
Androidアプリ開発パーフェクトマスター[最新版] (Perfect Master)
- 作者: 金城俊哉
- 出版社/メーカー: 秀和システム
- 発売日: 2016/11/29
- メディア: 単行本
- この商品を含むブログを見る
5.3 現在の日時を画面に表示するアプリ
時間のフォーマットについて以下を参考に。
using System; using Android.App; using Android.Widget; using Android.OS; namespace SystemTime { [Activity(Label = "SystemTime", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); var dt = DateTime.Now; var text = FindViewById<TextView>(Resource.Id.textView); text.Text = $"{dt.ToString("D")}\n{dt.ToString("tthh時mm分ss秒fff")}\n{dt.ToString("HH時mm分ss秒fff")}"; } } }
6.1.5 アクティビティの状態がわかるプログラムを作ってみよう
using Android.App; using Android.OS; using Android.Util; namespace LifeCycle { [Activity(Label = "LifeCycle", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { Log.Info("TEST", "OnCreate()"); base.OnCreate(bundle); SetContentView (Resource.Layout.Main); } protected override void OnStart() { Log.Info("TEST", "OnStart()"); base.OnStart(); } protected override void OnRestart() { Log.Info("TEST", "OnRestart()"); base.OnRestart(); } protected override void OnResume() { Log.Info("TEST", "OnResume()"); base.OnResume(); } protected override void OnPause() { Log.Info("TEST", "OnPause()"); base.OnPause(); } protected override void OnStop() { Log.Info("TEST", "OnStop()"); base.OnStop(); } protected override void OnDestroy() { Log.Info("TEST", "OnStop()"); base.OnDestroy(); } } }
6.1.7 コンテンツプロバイダーを使って画面の明るさを調べてみる
このとき気が付いたけど、AppCompatActivity を継承しないといけなかったようだが、わからなかった・・・。
using Android.App; using Android.Widget; using Android.OS; using Android.Provider; namespace ContentResolver { [Activity(Label = "ContentResolver", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); var tv = FindViewById<TextView>(Resource.Id.textView); tv.Text = $"画面の明るさ: {Settings.System.GetString(this.ContentResolver, Settings.System.ScreenBrightness)}"; } } }
6.1.11 ブロードキャストを受け取るプログラム
これは苦労した。
Javaでは使えるインターフェイスを匿名クラスでインスタンス化する(という言い方合ってる?)ことが出来ないので。
また、以下を参考に。
using Android.App; using Android.Content; using Android.Widget; using Android.OS; namespace BroadCast { [Activity(Label = "BroadCast", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { private MyBroadcastReceiver br; private IntentFilter intentFilter = new IntentFilter(); protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); br = new MyBroadcastReceiver() { Act = this }; } protected override void OnResume() { base.OnResume(); intentFilter.AddAction(Intent.ActionBatteryChanged); RegisterReceiver(br, intentFilter); } protected override void OnPause() { base.OnPause(); UnregisterReceiver(br); } [BroadcastReceiver(Enabled = true)] [IntentFilter(new[] { Intent.ActionBatteryChanged })] private class MyBroadcastReceiver : BroadcastReceiver { public MainActivity Act { get; set; } public override void OnReceive(Context context, Intent intent) { var level = intent.GetIntExtra("level", 0); var scale = intent.GetIntExtra("scale", 0); var tv = Act.FindViewById<TextView>(Resource.Id.textView); tv.Text = $"バッテリーの残量: {level / (float)scale * 100} (%)"; } } } }