【发布时间】:2017-05-05 21:50:52
【问题描述】:
我刚刚开始研究 Xamarin,只是想不通如何让多个活动具有引用相同的服务实例。
我从MainActivity 开始KeyPressedReceiver 并开始监听电源按钮被按下。
当点击三下时,我正在调用服务方法InitCancelActivity,它开始播放mp3文件并打开CancelActivity。
CancelActivity 中有一个文本字段和一个按钮。当用户按下此按钮时,我希望将文本字段中的值传递给 GeneralService 方法 KillAlert。
问题是如何从CancelActivity 引用GeneralService 的实例(已经创建),所以我可以调用KillAlert?
还有这部分
if (_service == null)
_service = new GeneralService();
看起来完全错误。我应该在MainActivity 中实例化它并传递给KeyPressedReceiver 构造函数吗?
[Activity(Label = "TTTT", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
KeyPressedReceiver receiver;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
receiver = new KeyPressedReceiver();
RegisterReceiver(receiver, new IntentFilter(Intent.ActionScreenOn));
}
}
[BroadcastReceiver(Enabled = true)]
public class KeyPressedReceiver : BroadcastReceiver
{
private GeneralService _service;
private int _clicks = 0;
public override void OnReceive(Context context, Intent intent)
{
if (_service == null)
_service = new GeneralService();
_clicks++;
if (_clicks > 5)
{
_service.InitCancelActivity();
}
}
}
[Service(Name = "com.ff.GeneralService")]
public class GeneralService : Service {
private readonly Android.Media.MediaPlayer _player;
public GeneralService()
{
_player = new Android.Media.MediaPlayer();
}
public void RaiseAlert()
{
// start playing .mp3 file
}
public void KillAlert(string pass)
{
// stop playing .mp3 file
}
public void InitCancelActivity()
{
this.RaiseAlert();
var i = new Intent(this, typeof(CancelActivity));
i.SetFlags(ActivityFlags.NewTask);
this.StartActivity(i);
}
}
[Activity(Label = "CancelActivity")]
public class CancelActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.cancel);
this.FindViewById(Resource.Id.cancelButtonYes).Click += delegate
{
var password = this.FindViewById(Resource.Id.cancelPassword);
// call KillAlert method from GeneralServic
};
}
}
【问题讨论】:
标签: c# android xamarin xamarin.android