问题描述
在尝试在我的项目中实现broadcast接收器类时,我有一个扩展了broadcastReceiver类的接收器,我打算检查是否通过单击按钮接收到broadcast,OnReceive方法内部有一个Toast代码,该代码应显示如果广播成功发送,请保持"{{ item.key }}"
。我的代码看起来像这样...
Intent Detected
class FlashActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
//Button deFinition
Button button1 = this.FindViewById<Button>(Resource.Id.button1);
//Clicking on this button should send the broadcast message
button1.Click += broadCastIntent;
}
//Method to send broadcast message on button click
private void broadCastIntent(object sender,EventArgs e)
{
Intent intent = new Intent();
intent.SetAction("com.Java_Tutorial.CUSTOM_INTENT");
Sendbroadcast(intent);
}
//broadCast Receiver class Implementation
[broadcastReceiver(Name="com.Java_Tutorial.CUSTOM_INTENT")]
public class MyReceiver: broadcastReceiver
{
public override void OnReceive(Context context,Intent intent)
{
//AckNowledge message was received via a Toast
Toast.MakeText(context,"Intent Detected.",ToastLength.Long).Show();
}
}
}
当我单击按钮时,没有显示Toast,请帮助...
解决方法
您需要添加一个IntentFilter属性
[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { "com.Java_Tutorial.CUSTOM_INTENT" })]
public class MyReceiver: BroadcastReceiver
{
public override void OnReceive(Context context,Intent intent)
{
//Acknowledge message was received via a Toast
Toast.MakeText(context,"Intent Detected.",ToastLength.Long).Show();
}
}
,
当我单击按钮时,没有显示吐司
您没有在活动中注册BroadcastReceiver
。
请按照以下代码进行注册。
[Activity(Label = "@string/app_name",Theme = "@style/AppTheme",MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
MyReceiver receiver;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this,savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
Button button1 = this.FindViewById<Button>(Resource.Id.button1);
receiver = new MyReceiver();
//Clicking on this button should send the Broadcast message
button1.Click += broadCastIntent; ;
}
private void broadCastIntent(object sender,System.EventArgs e)
{
Intent intent = new Intent();
intent.SetAction("com.Java_Tutorial.CUSTOM_INTENT");
SendBroadcast(intent);
}
//BroadCast Receiver class Implementation
protected override void OnResume()
{
base.OnResume();
RegisterReceiver(receiver,new IntentFilter("com.Java_Tutorial.CUSTOM_INTENT"));
// Code omitted for clarity
}
protected override void OnPause()
{
UnregisterReceiver(receiver);
// Code omitted for clarity
base.OnPause();
}
public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);
base.OnRequestPermissionsResult(requestCode,grantResults);
}
}
[BroadcastReceiver(Name = "com.Java_Tutorial.CUSTOM_INTENT")]
public class MyReceiver : BroadcastReceiver
{
public override void OnReceive(Context context,Intent intent)
{
//Acknowledge message was received via a Toast
Toast.MakeText(context,ToastLength.Long).Show();
}
}
}
此处正在运行GIF。
这是有关广播的有用文章。您可以参考它。
更新
试图找到一个帖子,在其中您可以通过广播检测手电筒是否已经打开,然后相应地在我的应用中切换开关
Android OS不为手电筒提供系统广播。但是我们可以检查手电筒的状态。如果手电筒的状态为打开,则可以发送广播,然后我们的broadcastReceiver可以获取它。
// note: camera come from: private Android.Hardware.Camera camera=Android.Hardware.Camera.Open();
if (camera.GetParameters().FlashMode.Equals(Android.Hardware.Camera.Parameters.FlashModeOff))
{
switchOn = false;
}
else if (camera.GetParameters().FlashMode.Equals(Android.Hardware.Camera.Parameters.FlashModeTorch))
{
switchOn = true;
Intent intent = new Intent();
intent.SetAction("com.Java_Tutorial.CUSTOM_INTENT");
SendBroadcast(intent);
}