服务:在后台长期运行的没有界面的组件 新建一个类PhoneService类,继承系统的Service类 清单文件中 进行配置 新建一个节点,设置名称android:name=”.PhoneService...” 类里面有几个重要方法 onCreate()方法,服务被创建的时候调用 onDestory()方法,服务被销毁的时候调用 开启服务 获取intent对象,new Intent(this,PhoneService.class...TELEPHONY_SERVICE)方法 调用TelephoneyManager对象的listen(istener,events)方法,监听手机通话状态,参数: PhoneStateListener对象,使用内部类类继承一下...空闲状态,TelephonyManager.CALL_STATE_RINGING响铃状态, TelephonyManager.CALL_STATE_OFFHOOK通话状态 需要权限android.permission.READ_PHONE_STATE...tm=(TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new MyPhoneStateListener
对象,通过getSystemService(TELEPHONY_SERVICE) 调用TelephonyManager对象的getSimSerialNumber()方法,得到String类型的序列号 把序列号保存在...SharedPreences里面 需要加权限 android.permission.READ_PHONE_STATE 检测sim卡是否变更 使用广播接收者,监听手机的开机广播 新建一个包 xxx.receiver,新建一个类BootCompleteReceiver.java...节点 添加动作节点,设置监听动作名称android.intent.action.BOOT_COMPLETED 在BootCompleteReceiver类里面的...; import android.content.Intent; import android.content.SharedPreferences; import android.telephony.TelephonyManager...= (TelephonyManager) getSystemService(TELEPHONY_SERVICE); // 根据保存的数据设置状态 String sim
能够针对那些特殊的电话进行自动挂断,避免打扰到用户 二、来电去电的监听方式(不一样的方式) 2.1 来去电监听方式一(PhoneStateListener) 来电监听是使用PhoneStateListener类,...使用方式是,将PhoneStateListener对象(一般是自己继承PhoneStateListener类完成一些封装)注册到系统电话管理服务中去(TelephonyManager) 然后通过PhoneStateListener...telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager...TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService...telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager
android sdk 提供很多公用的服务,也就是系统服务,开发者可以通过Activity类的getSystemService方法获取指定的服务。系统服务包含音频服务、视频服务窗口服务等。...1.获取telphony_mannager对象 TelephonyManager tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE...,String incomingnae) 3 { 4 switch(state) 5 { 6 case TelephonyManager.CALL_STATE_OFFHOOK..., Toast.LENGTH_LONG).show(); 8 break; 9 case TelephonyManager.CALL_STATE_RINGING
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> ---- ****已经封装好了的网络工具类*...; /** * 网络工具类 * Created by alic on 16-4-8. */ public class NetWorkUtils { /** * 判断是否有网络连接...telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);...= TelephonyManager.NETWORK_TYPE_UMTS || nSubType == TelephonyManager.NETWORK_TYPE_HSDPA...|| nSubType == TelephonyManager.NETWORK_TYPE_EDGE || nSubType == TelephonyManager.NETWORK_TYPE_CDMA
old API ,而在代理类中可以针对隐私 API 进行制约配置,从而达到隐私制约能力。...代理前: java调用: TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE...类中,最终 IMEIDelegate 真正调用 TelephoneManager.getImei 方法 。...TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE...大体流程与隐私 API HOOK 方法类似,首先编写 RequestPermissionsDelegate 代理类,代码如下。
④ 网络安全,比如银行类APP,第一次登录会麻烦一些,后面就比较的容易了。 而在实际开发中用的最多的就是防止重复登录了。 1....通过一个工具类来获取,这个工具类我也是通过视频学到的,挺牛逼的。 新建一个DeviceIdUtil 类。...telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE...而你需要的只是一个工具类而已。 ---- 总结 其实也没有啥好总结的,设备唯一标识码通过硬件的信息来获取,不会受到Android版本的影响,应用安装的影响,你甚至都不需要给权限。简单粗暴且有用。...源码就是上面的那个DeviceIdUtil工具类,复制到自己的项目中直接使用即可。
转载请以链接形式标明出处: 本文出自:103style的博客 最后的判断代码: /** * 是否正在电话通话中 */ private boolean phoneIsInUse() { TelephonyManager...mTelephonyManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE); int...= TelephonyManager.CALL_STATE_IDLE; } ---- 开始在网上搜了搜,找到下面这两个: 然后 却找不到 ITelephony 类了。
Android N 以上版本判断移动网络类型 先获取存储电话机本身服务信息的对象: TelephonyManager telephonyManager = (TelephonyManager) ctx.getSystemService...import androidx.annotation.RequiresPermission; import java.util.List; /** * CnPeng 1/22/21 * 功用:网络工具类...telephonyManager = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); if (...: case TelephonyManager.NETWORK_TYPE_EDGE: case TelephonyManager.NETWORK_TYPE_CDMA...: case TelephonyManager.NETWORK_TYPE_1xRTT: case TelephonyManager.NETWORK_TYPE_IDEN
调用WindowManager对象的addView()方法,添加进视图,参数:View对象,WindowManager.LayoutParams对象 LayoutParams对象的设置参考Toast类的...show()方法 此时,打电话和接电话会显示出来这个View,但是消不掉了 在之前判断来电的方法里,进行监听电话空闲状态,去除这个View switch判断中添加TelephonyManager.CALL_STATE_IDLE...android.graphics.Color; import android.os.IBinder; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager...* 来电显示 * * @author taoshihan * */ public class AddressService extends Service { private TelephonyManager...* 服务创建 */ @Override public void onCreate() { super.onCreate(); tm = (TelephonyManager
当我们手机的APP在用到网络时一般会先检测手机是不是能上网,或是上网是用的wifi还是手机流量,于是就把相关的网络检测信息封装到一个类里,直接调用方法即可实现了....我们新建一个networkUtils的类 网络是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager...ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager...mgrTel = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);...getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED) || mgrTel .getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS
绑定服务调用服务方法的过程 通过bindservice方式实现调用服务里面业务逻辑方法: 步骤: 1、在服务类中创建一个中间人MyBinder,继承了Binder,Binder实现了IBinder接口:...; 3、在MyBinder类中写一个方法用于调用服务的业务逻辑方法: public class MyBinder extends Binder{ //使用中间人调用服务里的方法...接口(interface): 对外开放暴露的功能,但是不会暴露功能实现的细节; 让中间人实现服务接口的目的:只对外暴露接口里面业务逻辑方法,隐藏中间人里面的其他方法; 步骤: 1、创建一个服务的接口类,...public interface IService { public void callMethodInService(); } 2、让服务中的中间人实现了服务的接口类:...public 、protected、private 等修饰符,默认是公开共享; 步骤: 1、创建一个服务的接口类,里面包含需要对外暴露的业务逻辑方法: 2、让服务中的中间人实现了服务的接口类: 3、修改并拷贝接口文件
//手机号码 public static String getLine1Number(Context context) { TelephonyManager tm = (TelephonyManager...public static String getNetworkOperator(Context context) { TelephonyManager tm = (TelephonyManager...case TelephonyManager.NETWORK_TYPE_EVDO_A: case TelephonyManager.NETWORK_TYPE_HSDPA...case TelephonyManager.NETWORK_TYPE_HSPA: case TelephonyManager.NETWORK_TYPE_EVDO_B...case TelephonyManager.NETWORK_TYPE_GPRS: case TelephonyManager.NETWORK_TYPE_EDGE
interface ITelephony{ boolean endCall(); void answerRingingCall(); } (2)在须要的类中加入例如以下方法...* @return */ private static ITelephony getITelephony(Context context) { TelephonyManager...mTelephonyManager = (TelephonyManager) context .getSystemService(TELEPHONY_SERVICE...); ClassTelephonyManager> c = TelephonyManager.class; Method getITelephonyMethod...mTelephonyManager = (TelephonyManager) this .getSystemService(TELEPHONY_SERVICE);
XposedBridgeApi-54.jar到新建工程的libs目录 2、修改app目录下的build.gradle文件,在AndroidManifest.xml中增加Xposed相关内容 3、新建hook类,...编写hook代码 4、在app上右键新建assets folder,然后在assets目录下新建文件xposed_init,在里面写上hook类的完整路径 3、Hook模块编写 1、新建Android...<meta-data android:name="xposedminversion" android:value="54" /> 3、新建hook类,...类的getDeviceId()和getSubscriberId()方法,返回字符串,而且只hook com.example.test应用。...tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); try {
: private static boolean isFastMobileNetwork(Context context) { TelephonyManager telephonyManager = (...TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); switch (telephonyManager.getNetworkType...case TelephonyManager.NETWORK_TYPE_CDMA: return false; // ~ 14-64 kbps case TelephonyManager.NETWORK_TYPE_EDGE...case TelephonyManager.NETWORK_TYPE_HSUPA: return true; // ~ 1-23 Mbps case TelephonyManager.NETWORK_TYPE_UMTS...TelephonyManager.NETWORK_TYPE_LTE: return true; // ~ 10+ Mbps case TelephonyManager.NETWORK_TYPE_UNKNOWN
举个最简单的IMEI的获取,常用的获取方式如下: TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService...(Context.TELEPHONY_SERVICE)); return telephonyManager.getDeviceId() 假如Root用户利用Xposed Hook了TelephonyManager...类的getDeviceId()方法,如下,在afterHookedMethod方法中,将DeviceId设置为随机数,这样每次获取的DeviceId都是不同的。...可以采用一些系统隐藏的接口来获取设备信息,隐藏的接口不太容易被篡改,因为可能或导致整个系统运行不正常 可以自己通过Binder通信的方式向服务请求信息,比如IMEI号,就是想Phone服务发送请求获取的,当然如果Phone服务中的Java类被...SystemProperties.get(property, UNKNOWN); } 不过SystemProperties的get方法很容被Hook,被Hook之后序列号就可以随便更改,不过好在SystemProperties类是通过
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);...telephonyManager.isNetworkRoaming()) { netType = 4; } else if (nSubType =...= TelephonyManager.NETWORK_TYPE_UMTS || nSubType == TelephonyManager.NETWORK_TYPE_HSDPA...|| nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0 && !...|| nSubType == TelephonyManager.NETWORK_TYPE_EDGE || nSubType == TelephonyManager.NETWORK_TYPE_CDMA
有人会说,那把代码封装到一个类不就好了吗?这样确实能减少代码量,但是每次都要主动去获取,这样是不是挺麻烦的。...---- 拓展工具类 以下工具类参考Android获取网络状态 public class NetStateUtils { /** * 判断当前网络是否是移动网络 *...telephonyManager = (TelephonyManager) context.getSystemService (Context.TELEPHONY_SERVICE...= TelephonyManager.NETWORK_TYPE_UMTS || nSubType == TelephonyManager.NETWORK_TYPE_HSDPA...telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE
领取专属 10元无门槛券
手把手带您无忧上云