時光不知不覺在指尖劃過,造化弄人,如今又重新開始學習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);
}
});
顯示效果: