广播机制在这就不多说了,上一期该说的都说了,这一节主要给出一些例子,仅供参考。
一、来去电拦截
注册接收器
<receiver android:name=".InCallReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<receiver android:name=".OutCallReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
package mobile.android.call.in.out.receiver;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
public class InCallReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context, final Intent intent)
{
//获得电话管理服务,以便获得电话的状态
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState())
{
case TelephonyManager.CALL_STATE_RINGING://响铃
String incomingNumber = intent
.getStringExtra("incoming_number");
Toast.makeText(context, incomingNumber, Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接听电话
Log.d("call_state", "offhook");
break;
case TelephonyManager.CALL_STATE_IDLE://挂断电话
Toast.makeText(context,"close", Toast.LENGTH_LONG).show();
}
}
}
package mobile.android.call.in.out.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class OutCallReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String outcomingNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Toast.makeText(context, outcomingNumber, Toast.LENGTH_LONG).show();
}
}
package mobile.android.call.in.out.receiver;
import android.app.Activity;
import android.os.Bundle;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
二、截获屏幕休眠与唤醒
package mobile.android.screen.on.off.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ScreenOnOffReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if (Intent.ACTION_SCREEN_ON.equals(intent.getAction()))
{
Log.d("screen", "ok");
}
else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction()))
{
Log.d("screen", "off");
}
}
}
package mobile.android.screen.on.off.receiver;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
public class Main extends Activity
{
private ScreenOnOffReceiver screenOnOffReceiver;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
screenOnOffReceiver = new ScreenOnOffReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(screenOnOffReceiver, intentFilter);
}
}
三、开机自动运行
<receiver android:name="StartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
package mobile.android.boot.complete.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class StartupReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent mainIntent = new Intent(context, Main.class);
mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainIntent);
}
}
package mobile.android.boot.complete.receiver;
import android.app.Activity;
import android.os.Bundle;
public class Main extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
四、显示当前手机电池的当前电量
package mobile.android.battery.changed.receiver;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.TextView;
public class Main extends Activity
{
private TextView tvBatteryChanged;
private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction()))
{
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryChanged.setText("电池用量:" + (level * 100 / scale) + "%");
}
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvBatteryChanged = (TextView) findViewById(R.id.tvBatteryChanged);
registerReceiver(batteryChangedReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}
}
五、自定义广播接收器播放一首音乐
package com.example.lesson21_broadcastreceiver;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MainBroadcastReceiver extends Activity {
private Button BroadcastButton;
private ImageView myImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_broadcast_receiver);
myImageView = (ImageView)findViewById(R.id.myImageView);
BroadcastButton = (Button)findViewById(R.id.BroadcastButton);
BroadcastButton.setOnClickListener(new BroadcastButtonListener());
}
class BroadcastButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent().
setAction("android.basic.lesson21.HelloYaoYao").putExtra("yaoyao", "yaoyao is a person");
MainBroadcastReceiver.this.sendBroadcast(intent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_broadcast_receiver, menu);
return true;
}
}
package com.example.lesson21_broadcastreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.util.Log;
public class HelloBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//Log.e("HelloBroadcastReceiver","BOOT_COMPLETED");
//Log.e("HelloBroadcastReceiver",""+intent.getAction());
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
Log.e("HelloBroadcastReceiver", "BOOT_COMPLETED");
}
if(intent.getAction().equals("android.basic.lesson21.HelloYaoYao")){
Log.e("HelloBroadcastReceiver","Say hello to yaoyao!!!!!!!");
Log.e("HelloBroascastReceiver",intent.getStringExtra("yaoyao"));
}
//播放一首音乐
MediaPlayer.create(context, R.raw.everybodyhurts).start();
}
}
<receiver
android:name=".HelloBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
<intent-filter>
<action android:name="android.basic.lesson21.HelloYaoYao"/>
</intent-filter>
</receiver>
五个小例子,可以借鉴参考一下。