2016-02-22 2 views

ответ

0

Это нечто специфичное для платформы. Unfortuneelty Я не знаю никаких плагинов для этого, поэтому вам нужно использовать собственный API в Xamarin.

На Android это TelephonyManager, как показано здесь: https://stackoverflow.com/a/14355706/1489968 Это Java, но может быть легко переведены на C#:

public class MainActivity : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 

     var telMng = (TelephonyManager) GetSystemService(TelephonyService); 
     var myPhoneStateListener = new MyPhoneStateListener(); 
     myPhoneStateListener.ServiceStateChanged += (s, e) => Console.WriteLine("State: {0}", e); 
     telMng.Listen(myPhoneStateListener, PhoneStateListenerFlags.ServiceState); 
    } 
} 

public class MyPhoneStateListener : PhoneStateListener 
{ 
    public event EventHandler<ServiceState> ServiceStateChanged; 
    public override void OnServiceStateChanged(ServiceState serviceState) 
    { 
     base.OnServiceStateChanged(serviceState); 
     ServiceStateChanged?.Invoke(this, serviceState); 
    } 
} 
0

КСН: Не уверен, что если эта информация доступна, никогда не видел его воздействию через SDK ... (возможно, добавьте тег iOS на этот вопрос или задайте вопрос iOS only, ответ может быть в ObjC/Swift, но вы можете перевести его)

На Android: информация, которую вы ищете, содержится в ServiceState телефона:

var callState = new ServiceState(); 
switch (callState.State) { 
case PhoneState.InService: 
    { 
     var uri = Android.Net.Uri.Parse ("tel:555-2368"); // Jim Rockford's number ;-) 
     var intent = new Intent (Intent.ActionDial, uri); 
     StartActivity (intent); 
     break; 
    } 
case PhoneState.EmergencyOnly: 
    { 
     Toast.MakeText (this, "Emergency Calls Only", ToastLength.Long).Show(); 
     break; 
    } 
case PhoneState.OutOfService: 
    { 
     Toast.MakeText (this, "Out of Service", ToastLength.Long).Show(); 
     break; 
    } 
case PhoneState.PowerOff: 
    { 
     Toast.MakeText (this, "Cell/Modem Power Off", ToastLength.Long).Show(); 
     break; 
    } 
default: 
    { 
     Toast.MakeText (this, "Should never be shown on a real device", ToastLength.Long).Show(); 
     break; 
    } 
} 

Ref: http://developer.android.com/reference/android/telephony/ServiceState.html

Для тестирования на эмуляторе, вы можете установить состояние в denied через adb оболочки:

voice denied 
data denied 

Ref: https://developer.android.com/tools/devices/emulator.html

+0

Работал для меня ... большое спасибо! – AlexJC

Смежные вопросы