Android中的四大组件

来源:互联网 发布:linux 清空回收站 编辑:程序博客网 时间:2024/05/02 00:12

Android中的四大组件指的是Activity(活动,就是我们所能够看到的界面),ContentProvider(内容提供者,通常用来数据共享,要和uri一起使用),Service(服务,与Activity特别相似,当不需要和用户进行页面交互时可优先考虑,通常用在后台播放音乐和天气预报等等),BroadcastReceiver(广播接收者,可实现组件间的通信)。

一、Activity

Activity是Android开发中最常用的组件之一,一个应用程序通常由若干个Activtiy组成。

1.建立

通常是新建一个类并继承Activity或其子类,并实现OnCreate()方法如

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

2.配置

在 <application> </application>中加入  

<activity android:name="com.example.test1.MainActivity"></activity>

如果该Activtiy作为启动Activtiy就加上

<intent-filter>
                <action android:name="android.intent.action.MAIN" />
</intent-filter>

3.生命周期



                  

4.启动与关闭

4.1 不带返回结果的启动

Intent intent=new Intent(A.this,B.class);

startActivity(intent);

finish();

4.2 带返回结果的启动

Intent intent=new Intent(A.this,B.class);

startActivity(intent,Integer);

finish(Integer);

下例演示了带返回结果的启动,本例中调用了系统的拨打电话的界面,故要加上权限

 <uses-permission android:name="android.permission.CALL_PHONE" />

MainActivtiy:

public class MainActivity extends Activity {
private EditText editText;
private Button btn;
private Intent intent;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
intent = new Intent(MainActivity.this, ContactActivity.class);
startActivityForResult(intent, 1);
}
});
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 2) {
String phone = data.getStringExtra("phone");
editText.setText(phone);
Uri uri=Uri.parse("tel:"+phone);
data = new Intent(Intent.ACTION_DIAL,uri);
startActivity(data);
}
}
}

activity_main:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:labelFor="@id/editText" />


    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn"
        android:textSize="@dimen/textSize" 
        android:layout_gravity="center_horizontal"/>


</LinearLayout>

ContactActivity:

public class ContactActivity extends Activity {
private ListView listView;
private String[] phone = { "1111", "2222", "3333", "4444", "5555", "6666",
"7777", "8888", "9999" };
    private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<String>(ContactActivity.this,
android.R.layout.simple_list_item_1, phone));
intent=getIntent();
listView.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
intent.putExtra("phone", phone[position]);
setResult(2, intent);
finish();
}
});
}
}

list:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>


</LinearLayout>

二、ContentProvider

自定义ContentProvider

1.创建

和Activtiy一样,都是创建一个类并继承ContentProvider,并实现相关方法,如下所示

public class MyContentProvider extends ContentProvider {


@Override
public boolean onCreate() {
// TODO Auto-generated method stub
return false;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
return null;
}


@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}


@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}


@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}


@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}


}

2.Uri简介

例如

content://com.example.MyContentProvider/word

content://相当于http://

com.example.MyContentProvider代表指定的ContentProvider

word代表资源部分

3.配置

如下所示

<provider
            android:name="com.example.test1.MyContentProvider"
            android:authorities="com.example.MyContentProvider"
            android:exported="true" >

</provider>

4.使用

主要是要与ContentResolver一起使用

ContentResolver contentResolver=getContentResolver();

ContentResolver所操作的增删改查方法实际上是操作ContentResolver所对应的方法

系统ContentProvider

在平时的开发中,系统ContentProvider用的比较多,主要由以下几种

联系人Uri:  ContactsContact.Contacts.CONTENT_URI

联系人电话Uri: ContactsContact.CommonDataKinds.Phone.CONTENT_URI

联系人E-mail Uri:ContactsContact.CommandDataKinds.Email.CONTENT_URI

其实这些可以理解为数据库中的列,然后通过游标的移动即可得到相关数据。

监听ContentProvider数据改变: ContentObserver

三、Service

自定义服务

1.创建

和之前一样,先先建一个类并继承Service或其子类(IntentService),并实现onBind()方法

如下所示

public class MyService extends Service {


@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}


}

2.配置

如下所示

 <service android:name="com.example.test1.MyService" >
 </service>

3.启动和关闭

startService()当程序退出了,Service仍在运行。以stopService()结束。

bindService()当程序退出了,Service停止运行。以unbindService()结束。


4.生命周期


系统服务

其实Android中提供了大量的系统服务供开发者使用,

在使用之前先要获取服务的权限,如 TelephonyManager tm=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);其他也类似

主要有如下服务:

1.电话管理 TelephonyManager

2.短信管理 SmsManager 

3.音频管理 AudioManager

4.振动器  Vibrator

5.闹钟服务 AlarmManager

四、BroadcastReceiver

自定义广播

1.创建,和之前类似,如下所示

public class MyBroadcastReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub


}


}

2.配置

<receiver android:name="com.example.test1.MyBroadcastReceiver" >
        </receiver>

3.发送广播

无序广播:sendBroadcast()

有序广播:sendOrderBroadcast()

系统广播

主要有时间改变,电量改变等等。

0 0
原创粉丝点击