/// <summary>
        /// Checks if an intent can be handled.
        /// </summary>
        public static bool IsIntentAvailable(Context context, Intent intent)
        {
            var packageManager = context.PackageManager;

            var list = packageManager.QueryIntentServices(intent, 0)
                       .Union(packageManager.QueryIntentActivities(intent, 0));

            if (list.Any())
            {
                return(true);
            }

            TelephonyManager mgr = TelephonyManager.FromContext(context);

            return(mgr.PhoneType != PhoneType.None);
        }
Ejemplo n.º 2
0
        public static bool IsIntentAvailable(Context ctx, Intent itt)
        {
            var pkcMng = ctx.PackageManager;

            var lst = pkcMng.QueryIntentServices(itt, 0)
                      .Union(pkcMng.QueryIntentActivities(itt, 0));

            if (lst.Any())
            {
                return(true);
            }

            var mng = TelephonyManager.FromContext(ctx);

            return(mng.PhoneType != PhoneType.None);
        }
Ejemplo n.º 3
0
        public override void OnReceive(Context context, Intent intent)
        {
            var telephonyManager = TelephonyManager.FromContext(context);

            if (intent.Action == Intent.ActionNewOutgoingCall)
            {
                OnOutgoingCall(context, intent.GetStringExtra(Intent.ExtraPhoneNumber));
            }
            else
            {
                switch (telephonyManager.CallState)
                {
                case CallState.Ringing:
                    OnIncomingCall(context, intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber));
                    break;
                }
            }
        }
Ejemplo n.º 4
0
        private void OnOutgoingCall(Context context, string phoneNumber)
        {
            var telephonyManager = TelephonyManager.FromContext(context);

            if (phoneNumber == null)
            {
                Log.Error(Tag, "Can't proceed outgoing call, caller phone number is null!");
                return;
            }

            var myPhoneNumber = new string(telephonyManager.Line1Number.Where(char.IsDigit).ToArray());

            if (myPhoneNumber.Length == 0)
            {
                Log.Error(Tag, "Can't proceed outgoing call, your phone number is null!");
                return;
            }

            var         phoneNumberUtils = PhoneNumberUtil.GetInstance();
            PhoneNumber callerPhoneNumber;

            try
            {
                callerPhoneNumber =
                    phoneNumberUtils.Parse(phoneNumber, context.Resources.Configuration.Locale.Country);
            }
            catch (Exception e)
            {
                Log.Error(nameof(PhoneCallReceiver), e.Message);
                return;
            }
            var thisPhoneNumber =
                phoneNumberUtils.Parse(myPhoneNumber, context.Resources.Configuration.Locale.Country);

            if (callerPhoneNumber.CountryCode == thisPhoneNumber.CountryCode)
            {
                Log.Debug(Tag,
                          $"Same for {phoneNumberUtils.Format(callerPhoneNumber, PhoneNumberFormat.INTERNATIONAL)}," +
                          $" {phoneNumberUtils.Format(thisPhoneNumber, PhoneNumberFormat.INTERNATIONAL)}");
                return;
            }

            if (new File(context.FilesDir, PhoneUtils.ExcludedOutCountryCodesFile).Exists())
            {
                string text;
                using (var reader =
                           new StreamReader(context.OpenFileInput(PhoneUtils.ExcludedOutCountryCodesFile)))
                {
                    text = reader.ReadToEnd();
                }

                foreach (var line in text.Split())
                {
                    if (int.TryParse(line, out var lineCode) && callerPhoneNumber.CountryCode == lineCode)
                    {
                        Log.Debug(Tag, $"Found {lineCode} in excluded outgoing country codes");
                        return;
                    }
                }
            }

            var warningMessage = string.Format(
                context.GetString(Resource.String.category_phone_notification_suspicious_call_to),
                callerPhoneNumber.GetInternationalNumber());

            using (var writer =
                       new StreamWriter(context.OpenFileOutput(PhoneUtils.SuspiciousCallsFile, FileCreationMode.Append)))
            {
                writer.WriteLine(warningMessage);
            }

            using (var writer =
                       new StreamWriter(context.OpenFileOutput(AlarmReceiver.CurrentSummaryFile, FileCreationMode.Append)))
            {
                writer.WriteLine(warningMessage);
            }

            var sender = new NotificationSender(context, DataHolder.PhoneCategory);

            sender.PutNormalizeExtra(PhoneUtils.CountryCodeKey, callerPhoneNumber.CountryCode);
            sender.PutNormalizeExtra(PhoneUtils.IsOutgoingKey, true);
            sender.Send(NotificationType.WarningNotification, warningMessage);
            MainActivity.Adapter?.Refresh();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 获取当前的网络类型(WIFI,2G,3G,4G)
        /// </summary>
        /// <param name="context">上下文</param>
        /// <returns>
        /// 网络类型:
        ///     <li>{@link TelephonyManager#PHONE_TYPE_NONE } : 0 手机制式未知</li>
        ///     <li>{@link TelephonyManager#PHONE_TYPE_GSM  } : 1 手机制式为GSM,移动和联通</li>
        ///     <li>{@link TelephonyManager#PHONE_TYPE_CDMA } : 2 手机制式为CDMA,电信</li>
        ///     <li>{@link TelephonyManager#PHONE_TYPE_SIP  } : 3</li>
        /// </returns>
        public static int GetNetWorkType(Context context)
        {
            var netType = NetworkNo;
            var info    = GetActiveNetworkInfo(context);

            if (info == null || !info.IsAvailable)
            {
                return(netType);
            }

            switch (info.Type)
            {
            case ConnectivityType.Wifi:
                netType = NetworkWifi;
                break;

            case ConnectivityType.Mobile:
            {
                var tm = TelephonyManager.FromContext(context);
                switch (tm.NetworkType)
                {
                case NetworkType.Gsm:
                case NetworkType.Gprs:
                case NetworkType.Cdma:
                case NetworkType.Edge:
                case NetworkType.OneXrtt:
                case NetworkType.Iden:
                    netType = Network2G;
                    break;

                case NetworkType.TdScdma:
                case NetworkType.EvdoA:
                case NetworkType.Umts:
                case NetworkType.Evdo0:
                case NetworkType.Hsdpa:
                case NetworkType.Hsupa:
                case NetworkType.Hspa:
                case NetworkType.EvdoB:
                case NetworkType.Ehrpd:
                case NetworkType.Hspap:
                    netType = Network3G;
                    break;

                case NetworkType.Iwlan:
                case NetworkType.Lte:
                    netType = Network4G;
                    break;

                default:

                    var subtypeName = info.SubtypeName;
                    if (subtypeName.Equals("TD-SCDMA", StringComparison.InvariantCultureIgnoreCase) ||
                        subtypeName.Equals("WCDMA", StringComparison.InvariantCultureIgnoreCase) ||
                        subtypeName.Equals("CDMA2000", StringComparison.InvariantCultureIgnoreCase))
                    {
                        netType = Network3G;
                    }
                    else
                    {
                        netType = NetworkUnknown;
                    }
                    break;
                }

                break;
            }

            default:
                netType = NetworkUnknown;
                break;
            }

            return(netType);
        }
Ejemplo n.º 6
0
        public string GetNetworkOperatorName()
        {
            var telephonyManager = TelephonyManager.FromContext(Application.Context);

            return(telephonyManager.NetworkOperatorName);
        }
Ejemplo n.º 7
0
 private DeviceCountryIdentifier()
 {
     _telephonyManager = TelephonyManager.FromContext(Application.Context);
 }
Ejemplo n.º 8
0
        /**
         * 获取当前的网络类型(WIFI,2G,3G,4G)
         * <p>需添加权限 {@code <uses-permission android:name="android.permission
         * .ACCESS_NETWORK_STATE"/>}</p>
         *
         * @param context 上下文
         * @return 网络类型
         * <ul>
         * <li>{@link #NETWORK_WIFI   } = 1;</li>
         * <li>{@link #NETWORK_4G     } = 4;</li>
         * <li>{@link #NETWORK_3G     } = 3;</li>
         * <li>{@link #NETWORK_2G     } = 2;</li>
         * <li>{@link #NETWORK_UNKNOWN} = 5;</li>
         * <li>{@link #NETWORK_NO     } = -1;</li>
         * </ul>
         */
        public static int getNetWorkType(Context context)
        {
            int         netType = NETWORK_NO;
            NetworkInfo info    = getActiveNetworkInfo(context);

            if (info != null && info.IsAvailable)
            {
                if (info.Type == ConnectivityType.Wifi)
                {
                    netType = NETWORK_WIFI;
                }
                else if (info.Type == ConnectivityType.Mobile)
                {
                    TelephonyManager tm = TelephonyManager.FromContext(context);


                    switch (tm.NetworkType)
                    {
                    case NetworkType.Gsm:
                    case NetworkType.Gprs:
                    case NetworkType.Cdma:
                    case NetworkType.Edge:
                    case NetworkType.OneXrtt:
                    case NetworkType.Iden:
                        netType = NETWORK_2G;
                        break;

                    case NetworkType.TdScdma:
                    case NetworkType.EvdoA:
                    case NetworkType.Umts:
                    case NetworkType.Evdo0:
                    case NetworkType.Hsdpa:
                    case NetworkType.Hsupa:
                    case NetworkType.Hspa:
                    case NetworkType.EvdoB:
                    case NetworkType.Ehrpd:
                    case NetworkType.Hspap:
                        netType = NETWORK_3G;
                        break;

                    case NetworkType.Iwlan:
                    case NetworkType.Lte:
                        netType = NETWORK_4G;
                        break;

                    default:

                        String subtypeName = info.SubtypeName;
                        if (subtypeName.Equals("TD-SCDMA", StringComparison.InvariantCultureIgnoreCase) ||
                            subtypeName.Equals("WCDMA", StringComparison.InvariantCultureIgnoreCase) ||
                            subtypeName.Equals("CDMA2000", StringComparison.InvariantCultureIgnoreCase))
                        {
                            netType = NETWORK_3G;
                        }
                        else
                        {
                            netType = NETWORK_UNKNOWN;
                        }
                        break;
                    }
                }
                else
                {
                    netType = NETWORK_UNKNOWN;
                }
            }
            return(netType);
        }