Android学习笔记

参考《第一行代码 第二版》

关于广播:即系统之间相互传递消息,故存在广播接收者。

 

注册广播接收者

注册方法:1.动态注册广播接收者 2.静态的注册广播接收者。

动态注册。

一:创建新类,继承自BroadcastReceiver(只需记住Bro+Receiver)Receiver即广播注册时可用。

并在新类中重写onReceive(Android Studio 快捷方法Ctel+O)

当收到广播时onReceive方法就会被执行。可在其中进行逻辑编辑。

如何收到广播,首先注册广播:

二:关于注册:intentFilter类+addAction()=A&&新创建的类=B&&registerReceiver()=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 service 注册广播 android广播注册方式_android

静态注册

一使用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"/>是给广播接收者添加广播类型,即让其接收该类型广播,在这里我们便引出了,自定义广播的用法。且看下回分解。