Xamarin Forms - SMS BroadcastReceiver в Android не работает
0 Andre Alwy de Souza [2018-09-21 18:15:00]
Кажется, это простая задача, но я не могу этого сделать. Видел кучу учебников и прочее. Может, кто-то может мне помочь. Я начинаю с приложения Xamarin Forms, у которого будет определенная задача для Android (Targeting Android 8.0 - Oreo). Поэтому для проверки я сделал следующее (XF 3.2.0.839982). Об этом говорилось в основном потому, что у него нет методов OnResume, OnPause, On....... (или я не знаю о них).
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, Application.IActivityLifecycleCallbacks
{
SMSBroadcastReceiver myreceiver;
IntentFilter intentFilter;
protected override async void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
var buttonbtnsendmessage = (Button)FindViewById(Resource.Id.sendBroadcast);
myreceiver = new SMSBroadcastReceiver();
intentFilter = new IntentFilter(SMSBroadcastReceiver.IntentAction);
intentFilter.Priority = 1000;
RegisterReceiver(myreceiver, intentFilter);
}
}
public class SMSBroadcastReceiver : BroadcastReceiver
{
public static string IntentAction = "android.provider.Telephony.SMS_RECEIVED";
public override void OnReceive(Context context, Intent i)
{
if (i.Action != IntentAction)
{
return;
}
Toast.MakeText(context, "Received broadcast in MyBroadcastReceiver, " +
" value received: " + i.GetStringExtra("key"),
ToastLength.Long).Show();
}
}
и манифест
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.BROADCAST_SMS" />
Но я не попадаю в приемник, когда получаю SMS. Просто чтобы проверить, будет ли это вообще работать, я изменил IntentAction на "MY_TEST" и отправил трансляцию из другого приложения, и он смог Toast.
Есть идеи?
sms xamarin.android xamarin.forms broadcastreceiver
1 ответ
0 Решение York Shen - MSFT [2018-09-24 09:08:00]
Xamarin Forms - SMS BroadcastReceiver в Android не работает
Вам не хватает всего в вашем коде.
Запрос разрешений времени выполнения в Android Marshmallow +
Начиная с Android 6.0 (уровень API 23), пользователи предоставляют разрешения для приложений во время работы приложения, а не при установке приложения. Вы должны запрашивать разрешения во время выполнения.
Системные разрешения делятся на две категории: нормальные и опасные:
- Обычные разрешения напрямую не угрожают конфиденциальности пользователей. Если ваше приложение отображает нормальное разрешение в своем манифесте, система автоматически предоставляет разрешение.
- Опасные разрешения могут предоставить приложению доступ к конфиденциальным данным пользователя. Если вы укажете опасное разрешение, пользователь должен явно дать разрешение на ваше приложение во время работы приложения.
READ_SMS
классифицируется как опасные разрешения, поэтому вы должны проверить эти разрешения вручную для уровня API 23 и выше.
Украсить
BroadcastReceiver
с BroadcastReceiverAttribute
Более подробную информацию см. В официальном документе: широковещательные приемники в Xamarin.Android
Вот пример:
[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { "android.provider.Telephony.SMS_RECEIVED" })]
class SMSBroadcastReceiver: BroadcastReceiver
{
public static string IntentAction = "android.provider.Telephony.SMS_RECEIVED";
public override void OnReceive(Context context, Intent i)
{
if (i.Action != IntentAction)
{
return;
}
Toast.MakeText(context, "Received broadcast in MyBroadcastReceiver, " +
" value received: " + i.GetStringExtra("key"),
ToastLength.Long).Show();
}
}