【Android开发】移动程序设计期末复习练习题(一)

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

        //获取idbutton1的按钮控件

        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); 

            }

        } );

        //获取idbutton2的按钮控件

        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();

    }

}

都看到这了不点个赞收藏进收藏夹积灰???icon-default.png?t=N7T8https://pan.baidu.com/s/1bs25QlIs9YtjDop6TzzSbw?pwd=jtk8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值