1、接收 电话状态的广播:
public class AssisstBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if( (intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED) ) && callingflash ){
Log.v(TAG, "AssisstBroadcast, ACTION_PHONE_STATE_CHANGED");
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState()) {
case TelephonyManager.CALL_STATE_RINGING:
{
Log.v(TAG, "AssisstBroadcast, CALL_STATE_RINGING");
Intent i = new Intent();
i.setClass(context, CallingflashServer.class);
context.startService(i);
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK:
case TelephonyManager.CALL_STATE_IDLE:
{
Log.v(TAG, "AssisstBroadcast, CALL_STATE_OFFHOOK");
Intent i = new Intent();
i.setClass(context, CallingflashServer.class);
context.stopService(i);
break;
}
}
}
}
}
2、闪光灯闪烁服务:
public class CallingflashServer extends Service{
private static final int FLASH_INTERVAL = 500;
private static Camera camera = null;
private static Parameters parameter = null;
Handler handler=new Handler();
Runnable runnable=new Runnable() {
public void run() {
if (null == camera )
{
camera = Camera.open();
}
camera.startPreview();
parameter = camera.getParameters();
parameter.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameter);
try{
Thread.sleep(FLASH_INTERVAL);
parameter = camera.getParameters();
parameter.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameter);
}catch(InterruptedException e){
e.printStackTrace();
}
handler.postDelayed(this,FLASH_INTERVAL);
}
};
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.v(TAG, "CallingflashServer onCreate");
handler.postDelayed(runnable,FLASH_INTERVAL);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v(TAG, "CallingflashServer onDestroy");
handler.removeCallbacks(runnable);
if (null != camera )
{
try {
camera.stopPreview();
} catch (Exception e) {
// Ignore
}
try {
camera.release();
} catch (Exception e) {
// Ignore
}
camera = null;
}}}
public class AssisstBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if( (intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED) ) && callingflash ){
Log.v(TAG, "AssisstBroadcast, ACTION_PHONE_STATE_CHANGED");
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState()) {
case TelephonyManager.CALL_STATE_RINGING:
{
Log.v(TAG, "AssisstBroadcast, CALL_STATE_RINGING");
Intent i = new Intent();
i.setClass(context, CallingflashServer.class);
context.startService(i);
break;
}
case TelephonyManager.CALL_STATE_OFFHOOK:
case TelephonyManager.CALL_STATE_IDLE:
{
Log.v(TAG, "AssisstBroadcast, CALL_STATE_OFFHOOK");
Intent i = new Intent();
i.setClass(context, CallingflashServer.class);
context.stopService(i);
break;
}
}
}
}
}
2、闪光灯闪烁服务:
public class CallingflashServer extends Service{
private static final int FLASH_INTERVAL = 500;
private static Camera camera = null;
private static Parameters parameter = null;
Handler handler=new Handler();
Runnable runnable=new Runnable() {
public void run() {
if (null == camera )
{
camera = Camera.open();
}
camera.startPreview();
parameter = camera.getParameters();
parameter.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameter);
try{
Thread.sleep(FLASH_INTERVAL);
parameter = camera.getParameters();
parameter.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameter);
}catch(InterruptedException e){
e.printStackTrace();
}
handler.postDelayed(this,FLASH_INTERVAL);
}
};
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.v(TAG, "CallingflashServer onCreate");
handler.postDelayed(runnable,FLASH_INTERVAL);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v(TAG, "CallingflashServer onDestroy");
handler.removeCallbacks(runnable);
if (null != camera )
{
try {
camera.stopPreview();
} catch (Exception e) {
// Ignore
}
try {
camera.release();
} catch (Exception e) {
// Ignore
}
camera = null;
}}}