一、判断题(本题共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