一、判断题(本题共10小题,每小题1分,共10分)
1、每个Dalvik虚拟机实例都是一个独立的进程空间,并且每个进程之间不可以通信。? (? )
2、TableLayout继承自LinearLayout,因此它完全支持LinearLayout所支持的属性。? ? ? (? )
3、如果要实现多个RadioButton按钮中只能选中一个,则必须将这多个RadioButton放在同一个RadioGroup中。? ? ?(? )
4、创建Activity时,首先调用的是onStart()生命周期方法。 ???????(? )
5、将文件存入Android手机的SD卡中,这种方式是属于内部存储方式。(? )
6、Android中通过内容解析者获取手机通讯录数据库的内容时,不需要加入读取手机通讯录的权限。? ? (? )
7、有序广播的广播效率比无序广播更高。 ??????????????????????(? )
8、使用服务的通信方式进行通信时,必须保证服务是以绑定的方式开启的,否则无法通信。? ? ? ? (? )
9、HttpURLConnection用于发送HTTP请求和获取HTTP响应。 ???(? )
10、Android SDK为开发者提供了org.json包,该包存放了解析JSON数据的类,其中,JSONObject类是用于解析数组结构的JSON数据。 ???????(? )
二、单选题(本题共10小题,每小题1分,共10分)
1、Android项目中的主题和样式资源,通常放在哪个目录下?(? )
A.res/drawable ???B.res/layout? ???C.res/values? ?????D.assets
2、下列关于AndroidManifest.xml文件的说法中,错误的是( ?)。
A. 它是整个程序的配置文件
B. 可以在该文件中配置程序所需的权限
C. 可以在该文件中注册程序用到的组件
D. 该文件可以设置UI布局
3、下列属性中,用于设置线性布局方向的是( ?)。
A.orientation??? ?B.gravity?? ?????C.layout_gravity?? D.padding
4、使用EditText控件时,当文本内容为空时,如果想做一些提示,那么可以使用的属性是(? )。
A.android:text?????? ??????????B.android:background?
C.android:inputType? ??????????D.android:hint
5、下列关于ListView的说法中,正确的是(? )。
A.ListView的条目不能设置点击事件
B.ListView不设置Adapter也能显示数据内容
C.当数据超出能显示范围时,ListView自动具有可滚动的特性
D.若ListView当前能显示10条,一共有100条数据,则产生了100个View
6、下列关于Android中Activity管理方式的描述中,正确的是(? )。
A.Android以堆的形式管理Activity
B.Android以栈的形式管理Activity
C.Android以树的形式管理Activity
D.Android以链表的形式管理Activity
7、下列关于SQLite数据库的描述中,错误的是(? )。
A.SqliteOpenHelper类有创建数据库和更新数据库版本的的功能。
B.SqliteDatabase类是用来操作数据库的。
C.每次调用SqliteDatabase的getWritableDatabase方法时,都会执行SqliteOpenHelper的onCreate()方法。
D.当数据库版本发生变化时,会调用SqliteOpenHelper的onUpgrade()方法更新数据库。
8、如果一个应用程序想要访问另外一个应用程序的数据库,那么需要通过( ?)实现
A.BroadcastReceiver? ?B.Activity?? ?C.ContentProvider? ?D.AIDL
9、如果通过bindService方式开启服务,那么服务的生命周期是(? )。
A.onCreate()→onStart()→onBind()→onDestroy()
B.onCreate()→onBind()→onDestroy()
C.onCreate()→onBind ()→onUnBind()→onDestroy()
D.onCreate()→onStart ()→onBind ()→onUnBind()→onDestroy()
10、下列关于MeidiaPlayer的描述,错误的是(? )。
A.? MediaPlayer是用于播放音频和视频的。
B.? MadiaPlayer对音频文件提供了非常全面的控制方法。
C.? MadiaPlayer会调用底层的音频驱动播放音频。
D.? MadiaPlayer只可以播放音频不能播放视频。
三、填空题(本题共10小题,每空1分,共10分)
1、程序员在编写Android应用程序时,主要是调用___________层提供的接口来实现。
2、Android中查看应用程序日志的工具是___________。
3、项目清单文件里,标签<manifest>的___________属性值定义Android应用的包名。
4、用于设置当前布局与屏幕边界、周围布局或控件的距离的布局属性名为___________。
5、在布局文件中,设置控件大小通常使用dp作为单位,而设置文字大小的单位是___________。
6、在清单文件中为Activity添加<intent-filter>标签时,必须添加的属性名为________,否则隐式Intent无法开启该Activity。
7、如果想要停止bindService()方法启动的服务,需要调用__________方法。
8、广播接收者需要重写BroadcastReceiver提供的抽象方法__________。
9、在Android系统中,创建与连接SQLite数据库需要使用抽象类__________。
10、在清单文件中注册自定义内容提供者组件所使用的标签是__________。
四、简答题(本题共4小题,每小题10分,共40分)
1、列举Android中的常用布局,并简述他们各自的特点。
2、简述实现Button按钮的点击事件的方式有哪几种?
3、简述Activity的生命周期的方法及什么时候被调用。
4、简述内容提供者的工作原理。
五、程序设计题(本题共2小题,每空2分,共30分)
1、在MainActivity组件对应的布局文件里,定义了两个Button按钮,其id分别设置为button1和button2,单击按钮后,分别启动对应的SecondActivity组件和ThirdActivity组件。从MainActivity跳转到ThirdActivity时,往ThirdActivity传递一个Bundle类型的数据。当从ThirdActivity返回到MainActivity时,同时返回给MainActivity一个字符串数据。
(1)调用其他Activity的主调组件MainActivity的代码如下:
public class MainActivity extends AppCompatActivity {
??? @Override
??? protected void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.activity_main);
? ??????//获取id为button1的按钮控件
??????? Button button1 =_____(1-1)_______(R.id.button1);
??????? button1.setOnClickListener(new View.OnClickListener() {
??????????? @Override
????? ??????public void onClick(View v) {
??????????????? Intent intent = new Intent();
? ??????????????//隐式调用SecondActivity
??????????????? intent.setAction("_________(1-2)_________");?
? ??????????????//启动SecondActivity,第2个参数为请求码
??????????????? _______(1-3)____________(intent, 2);?
??????????? }
??????? } );
? ??????//获取id为button2的按钮控件
??????? Button button2=findViewById(_____(1-4)_________);
??????? button2.setOnClickListener(new View.OnClickListener() {
?????????? ?@Override
??????????? public void onClick(View v) {
??????????????? Intent intent = new Intent();
?????????????? //显示调用ThirdActivity
??????????????? intent.setClass(MainActivity.this, _____(1-5)_________);?
?????????????? //设置Bundle类型数据
??????????????? Bundle bundle = new Bundle();?
??????????????? bundle.putString("name", "张三");
??????????????? bundle.___ (1-6)____("age", 20);
?????????????? //通过意图对象携带数据
??????????????? intent.putExtra("data", bundle);?
?????????????? //启动ThirdActivity并请求数据回传,第2个参数为请求码
??????????????? startActivityForResult(intent, 3);?
??????????? }
??????? } );
??? }
??? @Override
??? protected void onActivityResult(int requestCode, int resultCode, Intent data) {
??????? super.onActivityResult( requestCode, resultCode, data);
?????? //判断是哪个Activity返回的数据,使用结果码
??????? if(resultCode==3) {
?????????? //获取返回的数据
??????????? String string = data.getStringExtra("hello");
??????? }
??? }
}
(2)其中,在清单文件里,对被调用的第2个Activity组件配置如下:
<activity
android:name=".SecondActivity"
android:label="隐式调用SecondActivity">
<intent-filter>
<action android:name="android.intent.action.ysdy" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
(3)第2个Activity组件的代码如下:
public class SecondActivity extends AppCompatActivity {
??? @Override
??? protected void onCreate(Bundle savedInstanceState) {
?? ?????super.onCreate(savedInstanceState);
??????? setContentView(R.layout.activity_second);
}
(4)第3个Activity组件接收从MainActivity传递的捆绑数据,返回前设置非捆绑数据和结果码,其代码如下:
public class ThirdActivity extends AppCompatActivity {
??? @Override
??? protected void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.activity_third);
??????? String receiver="接收的数据如下: \n";
??????? Intent intent=getIntent();
??????? Bundle data= intent.getBundleExtra("data");? //获取捆绑数据
?? ?????receiver+="name: "+data.getString("name")+"\n";
??????? receiver+="age: "+data.getInt("age");
??????? //在屏幕上显示接收到的数据
??????? Toast.makeText(this, receiver, Toast.LENGTH_LONG).show();
??????? //通过意图对象携带返回数据
??????? intent=new Intent();
??????? intent.___ (1-7)______("hello","How are you?");?
??????? //设置返回数据和结果码
??????? _____(1-8)_______(3,intent);?
??? }
}
2、编写一个程序,根据不同的Uri获取联系人表中的相关信息如下所示:
(1)通过ContactsContract.Contacts.CONTENT_URI的Uri获取Contacts表中的联系人id和姓名,其字段分别为ContactsContract.Contacts._ID、ContactsContract.Contacts.DISPLAY_NAME。
(2)通过ContactsContract.CommonDataKinds.Phone.CONTENT_URI的Uri获取Data表中的联系人id和电话,其字段分别为ContactsContract.CommonDataKinds.Phone.CONTACT_ID、ContactsContract.CommonDataKinds.Phone.NUMBER。
请根据上述系统联系人数据库的相关信息,编写一个程序,用于读取系统联系人的姓名和电话,并将读取的信息显示在界面中。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView textView;
??? private Button query_contacts;
??? @Override
??? protected void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.activity_main);
??????? query_contacts = findViewById(R.id.query_contacts);
??????? query_contacts.setOnClickListener(this);
??????? textView = findViewById(R.id.tv);
??? }
??? @Override
??? public void onClick(View v) {
??????? //动态申请读取手机通讯录权限
??????? ActivityCompat.___ (2-1)______(MainActivity.this, new String[]{"android.permission.READ_CONTACTS"}, 1);
}
??? @Override
??? public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
????? ??super.onRequestPermissionsResult(requestCode, permissions, grantResults);
??????? if (requestCode == 1) {
??????????? for (int i = 0; i < permissions.length; i++) {
??????????????? if (permissions[i].equals("android.permission.READ_CONTACTS")
??????? && grantResults[i] == PackageManager.___ (2-2)______) {
??????????????? ????Toast.makeText(MainActivity.this,"已获取权限", Toast.LENGTH_SHORT).show();
??????????????????? fetchContactInformation();
??????????????? }else{
??????????????????? finish();
??????????????? }
??????????? }
??????? }
}
//读取手机联系人信息的方法
??? public void fetchContactInformation() {
??????? String id,name,phoneNumber;
? ??//定义一个字符串变量,用于保存查询结果
??????? String contacts = "";
? ??//获取内容解析器对象,用于对内容提供者的数据进行操作
??????? ContentResolver contentResolver = this.___ (2-3)______;
? ??????//首先查询手机联系人表获取联系人的id和姓名
??????? Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
??????????????? null, null, null, null);
??????? while(cursor.moveToNext()) {
??????????? //获取联系人id
??????????? id = cursor.getString(cursor.getColumnIndex(___ (2-4)______));
??????????? //获取联系人姓名
??????????? name = cursor.getString(cursor.getColumnIndex(___ (2-5)______));
??????????? contacts+= "姓名:"+name+"\n";
??????????? //然后查询手机联系人数据表获取联系人的电话号码
??????????? //根据id查询相应联系人的电话
??????????? Cursor phoneCursor = contentResolver.query(
?????? ?????????????ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
??????????????????? null, ___ (2-6)______ + "=" + id, null, null);
??????????? contacts+= "电话:";
??????????? while(phoneCursor.moveToNext()) {
????? ??????????phoneNumber = phoneCursor.getString(
phoneCursor.getColumnIndex(___ (2-7)______));
??????????????? contacts+= phoneNumber +"???????? ";
??????????? }
??????????? contacts+="\n\n";
??????????? phoneCursor.close();
??????? }
??? ????//在界面上显示所查询到的所有手机联系人信息
??????? textView.setText(contacts);
????? ??cursor.close();
??? }
}
都看到这了不点个赞收藏进收藏夹积灰???https://pan.baidu.com/s/1bs25QlIs9YtjDop6TzzSbw?pwd=jtk8