目录
1.在 AndroidManifest.xml 中进行声明:
四大组件查缺版.docx
Activity:
1.在 AndroidManifest.xml 中进行声明:
其中 <action android:name="android.intent.action.MAIN" /> 和
<category android:name="android.intent.category.LAUNCHER" /> 的作用是将该活动声明成主活动,
这样在打开应用时,就会启动该活动。
BroadcastReceiver:
- 编写广播接受器要继承 BroadcastReceiver 并重写 onReceive() 方法当广播接受器接收到广播后,就会调用这个方法。
//3. BroadcastReceiver:实现一个静态广播接收者和一个动态广播接收者
//实例化IntentFilter对象
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
//注册广播接收
registerReceiver(networkChangeReceiver, intentFilter);
3.
//通过继承BroadcastReceiver建立动态广播接收器
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
ConnectivityManager connectionManager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()){
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
4.发送有序广播
//通过继承BroadcastReceiver建立动态广播接收器,并给两个广播接受器设置 priority
34 <receiver
35 android:name=".MyBroadcastReceiver"
36 android:enabled="true"
37 android:exported="true">
38 <intent-filter android:priority="10">
39 <action android:name="com.example.learning.MY_BROADCAST" />
40 </intent-filter>
41 </receiver>
42
43 <receive
44 android:name=".MySecondBroadcastReceiver"
45 android:enabled="true"
46 android:exported="true" >
47 <intent-filter android:priority="5">
48 <action android:name="com.example.learning.MY_BROADCAST" />
49 </intent-filter>
50 </receiver>
这时候MyBroadcastReceiver会首先接收到广播,等MyBroadcastReceiver处理完后,
MySecondBroadcastReceiver才接收到广播。
在处理广播时可以使用 abortBroadcast(); 截断广播。
使用 sendOrderedBroadcast() 发送有序广播,第二个参数为接收权限,这里指定为null。
1 public class MainActivity extends AppCompatActivity {
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7
8 Button sendBroadcast = findViewById(R.id.send_broadcast);
9 sendBroadcast.setOnClickListener(view->{
10 Intent intent = new Intent("com.example.learning.MY_BROADCAST");
11 intent.setPackage("com.example.learning");
12 sendOrderedBroadcast(intent, null);
5.发送本地广播
=>使用本地广播机制只能够在应用程序的内部进行传递发送本地广播
使用本地广播机制只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。引入这一机制是为了防止在发送携带关键性数据的广播时被其他应用截获,以及防止其他应用不停的向我们的广播接受器发送垃圾广播。
本地广播主要由LocalBroadcastManager进行管理,它提供了注册本地广播监听器,以及发送本地广播的方法
//获取实例
LocalBroadcastManager.getInstance(context);
//注册本地广播
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
//注销本地广播
localBroadcastManager.unRegisterReceiver(localReceiver);
//发送本地广播
localBroadcastManager.sendBroadcast(intent);
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiver myBroadcastReceiver;
private LocalBroadcastManager localBroadcastManagerl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendBroadcast = findViewById(R.id.send_broadcast);
myBroadcastReceiver = new MyBroadcastReceiver();
localBroadcastManagerl = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter("com.example.learning.MY_BROADCAST");
localBroadcastManagerl.registerReceiver(myBroadcastReceiver, intentFilter);
sendBroadcast.setOnClickListener(view->{
Intent intent = new Intent("com.example.learning.MY_BROADCAST");
localBroadcastManagerl.sendBroadcast(intent);
});
}
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManagerl.unregisterReceiver(myBroadcastReceiver);
}
private class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyBroadcastReceiver received MyBroadcast.", Toast.LENGTH_SHORT).show();
}
}
}*/
ContentProvider:
//SQLiteOpenHelper帮助类:非常简单的对数据库进行创建和升级
//SQLiteOpenHelper是一个抽象类,需要创建一个自己的帮助类去继承他
//重写两个抽象方法:onCreate和onUpgrade
//两个实例方法:getReadableDatabase和getWritableDatabase
public class MyDatabaseHelper extends SQLiteOpenHelper {
SQLiteOpenHelper提供有getReadableDatabase()和getWriteableDatabase()方法,用于获取数据库实例。当调用它们任何一个时,都会先检测数据库是否已经被创建,如果数据库没有被创建,那么会调用onCreate()创建数据库;如果数据库已经被创建了就不会再调用onCreate()。不同的是,当不能再向数据库中添加数据时(比如没有更多的存储空间),调用getReadableDatabase()返回的数据库实例只能进行读操作,而调用getWriteableDatabase()会抛出异常。
//ContentResolver尝试访问程序的数据时,内容提供器才会被初始化
//另外,还需要提供一个构造函数,最简单的构造函数需要提供四个参数
//1. 上下文
//2. 数据库名
//3. 自定义的Cursor
//4. 数据库版本
@Override
public boolean onCreate() {
dbHelper = new MyDatabaseHelper(getContext(),"BookStore.db",null,2);
return true;
}
//查询数据
//查询数据使用query,它接收七个参数,返回的是Cursor
//1. 表名
//2. columns,指定要查询的列
//3. selection,同where
//4. selectionArgs,给第三个参数中的占位符指定值
//5. groupBy
//6. having
//7. orderBy
修改数据
修改数据使用update(),它接收四个参数:
1. 表名
2. ContentValues
3. 同where语句
4. 给第三个参数中的占位符指定值
SQLiteDatabase database = myDatabaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("price", 12.55);
database.update("book", contentValues, "id = ?", new String[]{"1"});
查询数据
查询数据使用query,它接收七个参数,返回的是Cursor
1. 表名
2. columns,指定要查询的列
3. selection,同where
4. selectionArgs,给第三个参数中的占位符指定值
5. groupBy
6. having
7. orderBy
Cursor cursor = database.query("book", null, null, null, null, null, null);
删除数据
删除数据使用delete(),它接收三个参数
1. 表名
2. selection,同where
3. slectionArgs,给第三个参数中的占位符指定值
SQLiteDatabase database = myDatabaseHelper.getWritableDatabase();
database.delete("book", "id = ?", new String[]{"1"});