Android学习笔记
参考《第一行代码 第二版》
关于广播:即系统之间相互传递消息,故存在广播接收者。
注册广播接收者
注册方法:1.动态注册广播接收者 2.静态的注册广播接收者。
动态注册。
一:创建新类,继承自BroadcastReceiver(只需记住Bro+Receiver)Receiver即广播注册时可用。
并在新类中重写onReceive(Android Studio 快捷方法Ctel+O)
当收到广播时onReceive方法就会被执行。可在其中进行逻辑编辑。
如何收到广播,首先注册广播:
二:关于注册:intentFilter类+addAction()=A&&新创建的类=B&®isterReceiver()=C;
即 C(A,B);在完成注册的同时,将类的实例和intentFilter(即想要收到的广播内容)。
其中addAction()中添加需要收到的广播类型。
完成上两步就已经完成了,注册广播接收者(用于接收广播),和当广播接受后所执行的动作。
最后关于销毁
三:取消注册重写onDestroy()方法(程序销毁时执行可参考Activity的生命周期)
调用unregisterReceiver()方法取消注册
下面附上一个练习也是《第一行代码》书上的对应练习。
动态注册:
监听手机网络是否发生变化
Java文件
package com.example.jackson.receiver_1;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private Receiver_1 r;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.com.CONNECTIVITY_CHANGE");
r=new Receiver_1();
Button button=(Button) findViewById(R.id.bt_1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "注册动态网络接收者", Toast.LENGTH_SHORT).show();
}
});
registerReceiver(r,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(r);
}
}
class Receiver_1 extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "网络发生变化", Toast.LENGTH_SHORT).show();
}
}
AndroidManifest.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jackson.receiver_1">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</manifest>
其中
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
为监听手机网络变化所需要的权限
下面放上IU代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.jackson.receiver_1.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="动态广播接收者"
android:textSize="25sp"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册广播接收者"
android:id="@+id/bt_1"
android:layout_marginTop="123dp"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
</RelativeLayout>
静态注册
一使用Android Studio快捷生成广播接收者new+other+Receiver
在onReceiver()中编写收到广播时的逻辑
二在XML文件中进行注册
系统自动生成receiver标签(仅Android Studio中),在标签下添加需要收到的广播内容如下:
完成上两步即可完成静态的对广播接受者进行注册
下面附上一个练习也是《第一行代码》书上的对应练习。
先附上静态创建的广播接收者部分的代码
package com.example.jackson.receiver_2;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"注册静态开机广播",Toast.LENGTH_SHORT).show();
}
}
下面是配置文件的代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jackson.receiver_2">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>获取监听开机广播的权限
在<receiver 标签下
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
中 <action android:name="android.intent.action.BOOT_COMPLETED"/>是给广播接收者添加广播类型,即让其接收该类型广播,在这里我们便引出了,自定义广播的用法。且看下回分解。