Android CallSetting 源码分析:从Java层到底层

需积分: 9 3 下载量 197 浏览量 更新于2024-09-17 收藏 30KB DOCX 举报
"Call_Setting.原生代码Java层分析" Android的Call Setting功能涉及到系统对SIM卡相关设置的管理,包括网络选择、PIN码管理以及来电显示等。在这个功能中,我们将深入到Java层源代码,了解从用户界面到底层实现的整个流程。 首先,Call Setting应用程序位于`/packages/apps/Phone`目录下。尽管一般的设置应用相关资源是在`/packages/apps/Settings`,但Call Setting的入口点和相关代码却与Phone应用紧密关联。在`/packages/apps/Settings/res/xml/settings.xml`文件中,可以看到`<PreferenceScreen>`标签指定了Call Setting的入口,它通过`android:targetPackage`和`android:targetClass`属性链接到了Phone应用的`com.android.phone.CallFeaturesSetting`类。 进入`/packages/apps/Phone/res/call_featrue_setting.xml`,我们可以看到Call Setting界面的布局定义。例如,`<PreferenceScreen>`和`<ListPreference>`标签用于构建UI元素,如`button_clir_key`,这对应于 caller ID 的设置。用户可以通过这个选项选择在拨打电话时是否显示对方的电话号码。 在`CallFeaturesSetting`类中,Android系统会处理用户的选择并调用相应的函数进行设置。例如,当用户更改caller ID设置时,`onOptionsItemSelected()`或`onPreferenceChange()`方法可能会被触发。这些方法会根据用户的选择更新系统设置,并可能涉及到与底层硬件交互的接口,如`IccCard`或`TelephonyManager`。 接下来,一旦Java层的设置完成,可能需要与RIL(Radio Interface Layer)通信,这是Android操作系统与基带处理器之间的一个接口层。RIL负责处理与无线网络相关的操作,如设置呼叫参数、读取SIM卡信息等。在`/system/core/ril.cpp`或对应的HAL(Hardware Abstraction Layer)中,会有对应的函数处理这些请求,例如`setCLIR`函数可能会用来设置caller ID的状态。 在RIL处理完请求后,它会通过 Binder 机制将指令发送到基带处理器,基带处理器再根据指令执行实际的设置操作。基带处理器可能有自己的固件或者微控制器,它们理解并执行这些网络设置命令。 从用户在Call Setting界面上点击一个选项,到该设置真正生效,涉及的流程包括:Java层的应用代码处理用户输入,通过RIL与基带处理器通信,最后由基带处理器更改SIM卡或网络的相关状态。这个过程中,Java层主要处理用户界面和逻辑控制,而与硬件相关的部分则通过RIL和基带处理器完成。理解这个过程对于Android系统的定制和优化具有重要意义。

File "D:\03lyf\代码\seq2point_train.py", line 188, in <module> history = model.fit(train_datagen,epochs=n_epoch, File "D:\py\Anaconda3\envs\代码\lib\site-packages\keras\utils\traceback_utils.py", line 65, in error_handler return fn(*args, **kwargs) File "D:\py\Anaconda3\envs\代码\lib\site-packages\keras\engine\training.py", line 1685, in fit tmp_logs = self.train_function(iterator) File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\util\traceback_utils.py", line 150, in error_handler return fn(*args, **kwargs) File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\eager\polymorphic_function\polymorphic_function.py", line 894, in __call__ result = self._call(*args, **kwds) File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\eager\polymorphic_function\polymorphic_function.py", line 926, in _call return self._no_variable_creation_fn(*args, **kwds) # pylint: disable=not-callable File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\eager\polymorphic_function\tracing_compiler.py", line 143, in __call__ return concrete_function._call_flat( File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\eager\polymorphic_function\monomorphic_function.py", line 1757, in _call_flat return self._build_call_outputs(self._inference_function.call( File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\eager\polymorphic_function\monomorphic_function.py", line 381, in call outputs = execute.execute( File "D:\py\Anaconda3\envs\代码\lib\site-packages\tensorflow\python\eager\execute.py", line 52, in quick_execute tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, KeyboardInterrupt

2023-06-13 上传