Android Studio的Log使用总结---建议收藏备用

本文详细介绍了Android中Log类的日志工具,包括其5种方法(d,e,i,w,v)的使用、参数解释、快捷键操作以及如何查找和控制日志级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、种类

 Androi中的日志工具类是Log(android.util.Log),这个类提供了如下5种方法来供我们打印日志。

方法作用
Log.d()
用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
Log.e()
用于打印程序中的错误信息,比如程序进入catch语句当。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。
Log.i()
用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮助你分析用户行为数据。对应级别info,比debug高一级。
Log.w()
用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
Log.v()
用于打印那些最为繁琐的、意义最小的日志信息。对应级别是verbose,是Android日志里面级别最低的一种。

二、日志方法

      先以Log.d()为例演示一下用法:它需要传入两个参数,第一个参数是tag,一般传入当前的类名就好,主要用于对打印信息进行过滤;第二个参数是msg,即想要打印信息的具体内容。

Log.d("Bluetooth","onCreate: debug");

        运行之后看控制台Logcat的内容:不仅包含了打印日志内容和tag名,还有包含程序的包名、打印时间以及应用进程的进程号。

三、快捷键

        只需要输入logd,然后按下Tab键,就会自动帮你补全一条完整的打印语句。同理,输入loge、logw等等。由于Log的所有打印方法都要求传入一个tag参数,每次都写一遍太过麻烦,这里有个小技巧,我们在onCreate()的方法外面输入logd,然后按下Tab键补全,自动生成一个TAG常量。

四、查找(过滤)日志

1.查看 Bluetooth 的 Logcat日志

2.查看 Main 的 Logcat日志

五、日志级别控制

        日志级别表,logcat主要有6个级别

log等级提示颜色
debug冗余信息,级别最低黑色
error调试信息蓝色
info普通信息绿色
warning警告信息橙色
vewbose错误信息红色
assert断言,级别最高

1.输入 level: 可看到有六个级别

2.输入level:error  查看error的日志

<think>嗯,用户的问题是关于在Android Studio中获取本机手机号码的方法。我需要先回忆一下相关的知识,然后结合提供的引用内容来回答。 首先,用户提到的引用3提到,获取手机号码的方法依赖于SIM卡是否存储了号码,而很多运营商可能不会存储这个信息。所以,方法可能不是在所有设备上都有效。 我记得在Android开发中,获取手机号码通常需要使用TelephonyManager类。需要检查READ_PHONE_STATE权限,并且用户可能需要授予该权限。不过,从Android 6.0开始,运行时权限变得重要,所以可能需要动态请求权限。 然后,根据引用3的内容,用户的方法可能只能工作于部分设备,因为SIM卡存储号码的情况因运营商而异。因此,在代码中需要处理可能获取不到的情况,比如返回null或者空字符串。 另外,用户可能需要在AndroidManifest.xml中添加权限声明,比如READ_PHONE_STATE。不过,从Android 10(API 29)开始,这个权限可能被限制,只能获取到空值,所以可能需要考虑其他方法,比如让用户手动输入。 另外,用户的问题可能涉及到不同的Android版本,需要说明不同版本下的差异。比如,高版本中权限更加严格,可能无法获取到手机号码,这时候需要备用方案。 可能还需要提到,虽然代码可以编写,但实际使用中不可靠,因此建议应用场景,比如企业应用或特定设备,或者建议用户手动输入。 现在,整理一下步骤:添加权限、获取TelephonyManager实例、调用getLine1Number方法、处理可能为空的情况、处理运行时权限。 还需要注意,从Android 10开始,应用必须具有电话权限组,且只能在有SIM卡的情况下才能获取,但可能返回空值。因此,需要告知用户这些限制。 总结回答的结构应该是:方法步骤、代码示例、注意事项、替代方案。同时,生成相关问题,帮助用户进一步了解。</think>### 逐步解答:Android Studio获取本机手机号码的方法 #### 1. 权限声明 在`AndroidManifest.xml`中添加以下权限: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE"/> ``` 从Android 6.0(API 23)开始,还需要在运行时动态申请权限[^3]。 --- #### 2. 动态权限申请(针对Android 6.0+) 在Activity中检查并请求权限: ```java if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE_PHONE_STATE); } ``` --- #### 3. 获取手机号码的核心代码 ```java TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String phoneNumber = telephonyManager.getLine1Number(); // 可能返回空字符串或null ``` ##### 注意事项: - **运营商依赖**:仅当SIM卡存储了号码时有效(部分运营商不会存储)[^3] - **Android版本限制**:从Android 10(API 29)开始,普通应用无法获取手机号码,即使有权限也可能返回空值 - **设备差异**:双卡设备需使用`SubscriptionManager`处理多SIM卡情况 --- #### 4. 完整示例代码 ```java public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE_PHONE_STATE = 101; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (checkPermission()) { getPhoneNumber(); } } private boolean checkPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE_PHONE_STATE); return false; } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE_PHONE_STATE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { getPhoneNumber(); } } } private void getPhoneNumber() { TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); String number = tm.getLine1Number(); if (number != null && !number.isEmpty()) { Log.d("PHONE_NUMBER", "号码:" + number); } else { Log.w("PHONE_NUMBER", "无法获取手机号码"); // 建议在此处引导用户手动输入 } } } ``` --- #### 5. 替代方案建议 1. **用户手动输入**:通过对话框要求输入 2. **设备绑定验证**:使用设备ID(IMEI/MEID)替代 3. **短信验证**:通过发送验证码获取联系方式 4. **运营商接口**:需要与运营商合作获取(企业级应用) --- ### 关键限制说明 - **隐私政策要求**:Google Play强制要求声明`READ_PHONE_STATE`权限的用途 - **Android 10+限制**:普通应用无法获取手机号码(返回空值) - **双卡设备处理**:需使用`SubscriptionManager.getPhoneCount()`遍历所有SIM卡 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值