分享
分销 收藏 举报 申诉 / 21
播放页_导航下方通栏广告

类型Android移动开发技术(慕课版)习题集题库及答案.docx

  • 上传人:快乐****生活
  • 文档编号:3331854
  • 上传时间:2024-07-02
  • 格式:DOCX
  • 页数:21
  • 大小:332.61KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Android 移动 开发 技术 慕课版 习题集 题库 答案
    资源描述:
    Android移动开发技术(慕课版)习题集题库及答案 一、填空题 1.在Android开发环境中,SDK组件的作用是用于( 开发 )Android应用。 2.在Android开发环境中,( Dalvik )组件的作用是虚拟机管理。 二、判断题 1.电子邮件客户端属于Android平台体系结构的应用程序框架层。( F ) 2.Android 中使用AVD Manager工具进行SDK版本控制。( F ) 3.Android 只能在Windows环境下开发。( F ) 三、问答题 1. 写出2种当前比较流行的移动操作系统并介绍其作用和特点。 略 2. 简述Android平台体系结构的层次划分,并说明各个层次的作用。 第一层Linux内核,提供有操作系统内核管理的底层基础功能;第二层中间层,由函数库和Android运行时构成;第三层应用程序框架层,提供了Android平台的管理功能和组件重用机制;第四层应用程序层,提供了一系列核心应用程序。 习题 一、填空题 1.Android项目打包后生成一个( apk )文件。 2.Logcat日志信息按照等级由低到高划分为五个等级,分别是( verbose )、( debug )、( info )、( warn )、( error )。 3.如果想根据日志信息的标签进行日志信息的过滤,需要添加的过滤条件是( tag )。 二、问答题 1.简述签名的意义。 a) 为了保证每个应用程序开发商合法ID b) 防止部分开发商可能通过使用相同的Package Name来混淆替换已经安装的程序 c) 保证我们每次发布版本的一致性(如自动更新不会因为版本不一致而无法安装) 2.简述Release版本和Debug版本打包生成的文件的区别。 debug模式:系统自动生成debug签名; debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;Debug模式下签名用的证书(默认是Eclipse/ADT和Ant编译)自从它创建之日起,1年后就会失效。 debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题,相当于软件不具备升级功能 通过在Android studio上运行直接在模拟机或手机上启动程序,只是调试程序而已; release模式:用自己生成的key文件来签名; release通常被称为发布版本。 3.简述APK文件反编译得到的几个文件的作用。 AndroidManifest 全局配置文件; Classes.dex java核心代码文件; Resource 记录了资源文件的位置和id之间的映射关系; Res文件夹 资源文件; META-INF文件夹 用于保证apk文件的完整性和安全性; Mf 包含所有文件的文件名的编码值,保证apk的完整性; Rsa 非对称加密,被称为公钥加密标准;算法自己看;公钥加密; Sf 同manifest的结构,私钥加密; 习题 一、选择题 通过特定的接口类进行事件处理的是( C )。 A.事件 B.事件源 C.事件监听器 D.事件处理器 二、填空题 Android的事件处理模型常用的有( 基于监听接口 )和( 基于回调接口 )。 三、问答题 1.简述基于监听接口的事件处理模型的编程步骤。 1)获取普通界面组件; 2)实现事件监听类,该监听类是一个特殊的java类,必须实现一个XXXListener接口; 3)调用事件源的setXXXListener方法注册事件监听器 2.简述Android中点击事件、长按事件、键盘事件、触摸事件、焦点改变事件、选择改变事件对应的事件监听接口。 单击事件:onClickListener; 长按事件:onLongClickListener; 键盘事件:onKeyListener; 触摸事件:onTouchListener; 焦点改变事件:onFocusChangeListener; 选择改变事件:onCheckedChangeListener 3.哪些监听方法的返回值为布尔值?其意义有何不同? 布尔值用来表示您是否已经处理完事件,以及是否应该将他继续传下去。也就是说,返回true表示已经处理事件并且事件应该就此停止;如果返回值为false表示您尚未处理事件或者事件应该继续传递给其他任何点击监听器。 四、编程题 写一个输入框,当对输入框进行触摸操作时可以获取触控行为的抬起、滑动、按下的状态,以及触摸操作的位置坐标。 页面代码如下: <EditText android:id="@+id/et_touch" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_action" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 其中,在输入框中显示当前坐标,在文本框中显示当前的鼠标状态值。 public class OnTouchActivity extends Activity { EditText et_touch; TextView tv_action; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ontouch_layout); et_touch = (EditText) findViewById(R.id.et_touch); tv_action = (TextView)findViewById(R.id.tv_action); et_touch.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int iAction = event.getAction(); switch (iAction){ case MotionEvent.ACTION_DOWN: Log.i("tag","按下"); break; case MotionEvent.ACTION_MOVE: Log.i("tag","滑动"); break; case MotionEvent.ACTION_UP: Log.i("tag","抬起"); } double x = event.getX(); double y = event.getY(); et_touch.setText("点的坐标为:("+x+","+y+")"); tv_action.setText("action=="+iAction); return true; } }); 习题 一、填空题 1.设置Toast消息居中显示的方法是( setGravity(Gravity.CENTER) )。 2.创建Notification对象需要使用的是( NotificationManager ),发送通知栏信息使用的方法是( notify() ),取消发送通知栏信息的方法是( cancel() )。 3.创建一个AlertDialog对话框需要使用的对象类是( AlertDialog.Builder )。 二、简答题 1.简述Toast消息提示框的特点。 一种快速的即时消息。 消息内容简短。 悬浮于应用程序的最上方 不获得焦点 用于提示任务是否完成的消息提示机制 2.简述Notification通知栏的适用情况。 某些信息不需要用户马上处理,可以利用通知。即延迟消息,比如软件的更新、短信、新闻之类的。 3.简述一个对话框包含的内容。 图标、标题、内容、选择按钮 三、编程题 编写Android程序,模拟实现用户注册功能。如果用户名是张三,密码是123,点击“登录”按钮,触发点击事件,使用Toast提示“登录成功”,否则提示“登录失败”。效果如图5.8所示。 图5.8 显示效果 activity_main.xml代码如下。 <?xml version="1.0" encoding="utf_8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> (1) 请补全代码 <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/login_password" android:hint="请输入您的密码"/> (2) 请补全代码 </LinearLayout> MainActivity代码如下。 public class MainActivity extends AppCompatActivity { //声明 (3) 请补全代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); (4) 请补全代码 } 代码如下: (1) <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/login_username" android:hint="请输入您的用户名"/>(2分) (2) <Button android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/login" android:text="登录" />(2分) (3) private EditText et_name,et_pass;(0.5分) private Button btn_login;(0.5分) (4) setContentView(R.layout.activity_main);(1分) //初始化 et_name=(EditText) findViewById(R.id.login_username);(0.5分) et_pass=(EditText) findViewById(R.id.login_password);(0.5分) btn_login=(Button) findViewById(R.id.login);(1分) //创建适配器 btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v)(1分) String name= et_name.getText().toString(); String pass=et_pass.getText().toString();(2分) if("张三".equals(name)&&"123".equals(pass)){ Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show(); (2分) }else { Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show(); (2分) } } }); 习题 一、填空题 1. 图片资源的存放路径( res/drawable )、字符串资源的存放路径( res/strings )、颜色资源的存放路径( res/colors )、尺寸资源的存放路径( res/dimens )。 2. 资源文件一般存放在( xml )格式的文件中。 3. 引用一个自定义的颜色资源,通过什么属性进行引用( name )。 4. 常用的数组资源中包含的子元素有( array )、( integer-array )、(string-array) 二、简答题 简述资源文件的引用方式。 自定义资源文件:@[pachage]type/name 系统资源文件:@android:type/name R.java文件访问资源文件:R.type.name 三、编程题 使用StateListDrawable资源编写一个资源文件,要求输入框在获得焦点和失去焦点时输入框中的字体分别呈现不同的颜色状态。 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=" <!-- 获得焦点时的颜色 --> <item android:state_focused="true" android:color="@color/c4"></item> <!-- 失去焦点时的颜色 --> <item android:state_focused="false" android:color="@color/c6"></item> </selector> 习题 一、选择题 如果将一个TextView的android:layout_height属性值设置为wrap_content,那么该组件的展示效果为( D )。 A.该文本域的宽度将填充父容器的宽度 B.该文本域的宽度仅占该控件的实际宽度 C.该文本域的高度将填充父容器的宽度 D.该文本域的高度仅占该控件的实际高度 二、简答题 简述TextView组件和EditText组件的区别。 TextView是一种用于显示字符串的控件 EditText则是用来输入和编辑字符串的控件 EditText是一个具有编辑功能的TextView 三、编程题 编写Android程序,利用ArrayAdapter数组适配器实现图7.15的效果(注意:列表项布局使用android.R.layout.simple_list_item_1)。 图7.15 利用ArrayAdapter数组适配器实现的效果 activity_main.xml代码如下。 <?xml version="1.0" encoding="utf_8"?> <RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent"> (1) 请补全代码 </RelativeLayout> MainActivity代码如下。 public class MainActivity extends AppCompatActivity { //声明 (2) 请补全代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); (3) 请补全代码 } } 代码如下: (1) <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> (2) ListView listView; ArrayAdapter arrayAdapter; (3) setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); String[] arr_data = {"item1","item2","item3","item4"}; arrayAdapter=new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,arr_data); listView.setAdapter(arrayAdapter); 习题 一、填空题 1.通过( TableRow )标签划分TableLayout中的行。 2.通常使用( layout_height )和( layout_weight )常量来设置宽度或高度。 3.布局中的所有元素均使用( View )和( View Group )对象的层次结构进行构建。 二、简答题 简述Android开发过程中常用的五种布局的特点。 线性布局(LinearLayout),实现垂直或水平布局; 相对布局(RelativeLayout),根据控件之间的相对位置进行布局; 表格布局(TableLayout),将整个页面划分为行列表格进行布局; 帧布局(FrameLayout)控件只能放在页面的左上角,新添加的控件会覆盖已存在的控件; 绝对布局(AbsoluteLayout),控件的位置根据x,y坐标进行设定。 三、编程题 使用RelativeLayout实现图8.16所示的布局。 图8.16 要求实现的布局 代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_name" android:text="用户名" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:id="@+id/et_name" android:layout_below="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_cancel" android:text="cacel" android:layout_below="@+id/et_name" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/bn_ok" android:text="ok" android:layout_toLeftOf="@+id/btn_cancel" android:layout_alignTop="@+id/btn_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> 习题 一、填空题 1.Activity的生命周期包括运行状态、暂停状态、停止状态和( 死亡状态 )。 2.当处于暂停状态(Paused)的Activity由被覆盖状态回到前台或解锁屏时,系统会调用( restart )方法,再次进入( onResume )。 3.Intent常用属性主要有( 组件 )、动作、动作的类别、数据、数据MIME类型以及附加信息等。 4.启动一个Activity并从新的组件获得返回值所需方法为( onActivityResult() )。 5.Intent调用可以分为( 显式 )和( 隐式 )两种类型。 6.广播接收端使用( OnReceive )告知系统其可以接收的广播类型。 7.在Intent的Action属性中,用来标识应用程序入口的是( ACTION_MAIN )。 8.Android组件中运行于后台,没有界面交互的是( Service )。 9.使用Context的( startActivity )方法可以启动Activity。 10.在Android提供的通讯录数据库contact2.db中,用于存储联系人详细信息的表是( contacts )。 二、选择题 1.关于Activity生命周期的onCreate()和onStart()方法说法正确的是( D )。 A.当第一次启动的时候先后调用onStart()和onCreate()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果Activity已经启动,将先后调用onCreate()和onStart()方法 D.如果Activity已经启动,将只调用onStart()方法 2.下面不是退出Activity方法的是( C )。 A.finish() B.System.exit() C.onStop() D.异常强制退出 3.下面在AndroidManifest.xml文件中设置访问网络权限正确的是( A )。 A.<uses-permission android:name="android.permission.INTERNET"> B.<uses-permission name="android.permission.INTERNET"> C.<uses-permission android:id="android.permission.INTERNET"> D.<uses-permission permission ="android.permission.INTERNET"> 4.对一些资源以及状态的操作保存,最好是保存在生命周期的( A )函数中进行。 A.onPause() B.onCreate() C.onResume() D.onStart() 5.Android中属于Intent的作用的是( C )。 A.实现应用程序间的数据共享 B.Intent是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C.可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D.处理一个应用程序整体性的工作 6.( A )通常就是一个单独的窗口界面。 A.Activity B.Intent C.Service D.Content Provider 7.关于Service生命周期的onCreate()和onStart(),说法正确的是( D )。 A.当第一次启动的时候先后调用onStart()和onCreate()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果Service已经启动,将先后调用onCreate()和onStart()方法 D.如果Service已经启动,只会执行onStart()方法,不在执行onCreate()方法 8.下列关于ContentProvider,说法错误的是( C )。 A.ContentProvider的作用是实现数据共享和交换 B.要访问ContentProvider,只需调用ContentProvider增、删、改、查的相关方法 C.Content Provider提供的URI必须以“content://”开头 D.Android对于系统里的音视频、图像、通讯录提供了内置的ContentProvider 三、简装题 描述Android中ContentProvider的作用。 内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。 有时候需要在应用程序之间共享数据。这时内容提供者变得非常有用。 内容提供者可以让内容集中,必要时可以有多个不同的应用程序来访问。内容提供者的行为和数据库很像。你可以查询,编辑它的内容,使用 insert(), update(), delete() 和 query() 来添加或者删除内容。多数情况下数据被存储在 SQLite 数据库。 四、程序设计 设计一个应用,界面中有一个EditText控件和一个Button控件,当点击按钮时,能够打开在EditText中输入的网址。 略 习题 一、填空题 1.SharedPreferences最终的存储形式是( xml )文件。 2.使用SharedPreferences方式操作数据时,首先要通过Context的( getDefaultSharedPreferences() )函数获得SharedPreferences类对象。 二、选择题 1.下面关于SharedPreferences的表述正确的是( D )。 A.SharedPreferences pref=new SharedPreferences() B.Editor editor=new Editor() C.SharedPreferences.apply()操作会马上将数据写入磁盘文件 D.Editor对象存储数据最后都要调用commit()方法 2.下面关于Android数据存储方式描述错误的是( B )。 A.Android可以采用SharedPreferences数据存储 B.Android文件存储形式中,用户只能访问外部存储 C.Android可以使用数据库存储 D.Android可以采用ContentProvider存储数据 3.关于Android中文件操作描述正确的是( C )。 A.Android应用只能访问本应用程序的文件 B.Android应用可以获得图片、音频等公共存储空间中的文件 C.Android应用能够读取其他应用程序空间中的文件 D.Android应用能够修改其他应用程序空间中的文件 三、编程题 根据所学的Android文件操作知识,实现一个记事本功能的App。 略 习题 一、填空题 1.SQLite数据库中用于获取帮助的命令是( .help )。 2.在用游标操作SQLite数据表时,获取数据表中记录数的方法是( query() )。 3.用SQLiteOpenHelper类操作数据库时,数据库表建立语句一般在( onCreate() )方法中执行。 4.SQLiteOpenHelper类操作数据库时,当数据库版本发生改变时,会自动调用( onUpdate() )方法。 二、选择题 1.下面关于SQLite数据库描述正确的是( D )。 A.SQLite数据库中数据类型是强数据类型 B.SQLite数据库操作时,如果插入的数据类型与字段数据类型不一致,则一定不能插入 C.SQLite数据库只能应用在Android系统中 D.SQLite中能够使用事务操作 2.下面关于SQLite操作描述不正确的是( C )。 A.SqliteOpenHelper类主要用来创建数据库和更新数据库 B.SqliteDatabase类可以用来操作数据库 C.在每次调用SqliteDatabase类的getWritableDatabase()方法时,会执行SqliteOpenHelper类的onCreate()方法 D.当数据库版本发生变化时,可以自动更新数据库结构 三、论述题 简要论述在Android项目中,用MVC开发数据库系统的基本操作步骤。 视图层(View) 对应于xml布局文件和java代码动态view部分。 控制层(Controller) MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。 模型层(Model) 针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。 习题 一、简答题 简述android:visibility属性对应的属性值及区别。 可见(visible) XML文件:android:visibility=“visible” Java代码:view.setVisibility(View.VISIBLE); 不可见(invisible) XML文件:android:visibility=“invisible” Java代码:view.setVisibility(View.INVISIBLE); 隐藏(GONE) XML文件:android:visibility=“gone” Java代码:view.setVisibility(View.GONE) 二、编程题 编程实现图12.9所示的效果。当点击第1个按钮时,实现图12.10所示的效果;当点击第3个按钮时,实现图12.11所示的效果。 图12.9 实现效果1 图12.10 实现效果2 图12.11 实现效果3 代码如下: Java代码: public class MainActivity extends Activity { private TextView txt222 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txt222 = (TextView)findViewById(R.id.txt2222); findViewById(R.id.btn1).setOnClickListener(listener); findViewById(R.id.btn2).setOnClickListener(listener); findViewById(R.id.btn3).setOnClickListener(listener); } View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: txt222.setVisibility(View.VISIBLE); break;
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:Android移动开发技术(慕课版)习题集题库及答案.docx
    链接地址:https://www.zixin.com.cn/doc/3331854.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork