Android學習--廣播使用

       時光不知不覺在指尖劃過,造化弄人,如今又重新開始學習Android。今天主要學習Broadcast Receiver用法,記錄一下自己的學習過程。

       廣播的註冊方式分爲動態註冊和靜態註冊。

1、動態註冊

1)主MainActivity中先定義一個NetworkChangeReceiver 繼承BroadcastReceiver,並複寫onReceive()方法,然後創建intentFilter 和networkChangeReceiver對象,通過registerReceiver()註冊廣播

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager)
                    getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if(null!= networkInfo && networkInfo.isAvailable()){
                Toast.makeText(MainActivity.this, "network is available!",
                        Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(MainActivity.this, "network is  unavailable!",
                        Toast.LENGTH_SHORT).show();
            }

        }
    }

}

在Manifest.xml文件添加權限

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

在模擬器(或android手機)中更改數據網絡方式(打開或禁用),效果如下

 

2、靜態註冊

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class BootCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete!", Toast.LENGTH_LONG).show();
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

在Manifest.xml文件添加intent-filter及相應權限

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

<receiver
    android:name=".BootCompleteReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

系統廣播

重啓模擬器或手機,即可

3、自定義廣播

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context, "received in MyBroadcastReceiver!", Toast.LENGTH_LONG).show();
    }
}

在Manifest.xml文件註冊廣播添加intent-filter

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
    </intent-filter>
</receiver>

在主MainActivity中添加button用來發送廣播(在佈局文件中添加一個button)

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
        sendBroadcast(intent);
    }
});

顯示效果:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章