1、功能:当手机来电时,闪光灯发生闪烁(装逼用哈哈~~)。
2、知识点:a、广播:监听手机来电。
b、有关闪光灯的知识。
3、建立广播接收器,代码如下:
public class PhoneStatReceiver extends BroadcastReceiver { private Camera camera; public PhoneStatReceiver() { } //打开闪光灯 private void open() { try { camera = Camera.open(); camera.startPreview(); Camera.Parameters parameters = camera.getParameters(); parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); camera.setParameters(parameters); } catch (Exception e) { e.printStackTrace(); } } //关闭闪光灯 private void close() { try { Camera.Parameters parameters = camera.getParameters(); parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); camera.setParameters(parameters); camera.release(); camera = null; } catch (Exception e) { e.printStackTrace(); } } @Override public void onReceive(Context context, Intent intent) { // 如果是来电 TelephonyManager tManager = (TelephonyManager) context .getSystemService(Service.TELEPHONY_SERVICE); //电话的状态 switch (tManager.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: //等待接听状态 String mIncomingNumber = intent.getStringExtra("incoming_number"); new Thread(new Runnable() { @Override public void run() { while (true) { open(); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } close(); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); Log.d("RINGING :" ,mIncomingNumber); break; case TelephonyManager.CALL_STATE_OFFHOOK: close(); //接听状态 break; case TelephonyManager.CALL_STATE_IDLE: //挂断状态 break; } }}
4、AndroidManifest.xml中添加权限,以及广播接收器的有关信息
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<receiver android:name=".PhoneStatReceiver" android:enabled="true" android:exported="true"> <intent-filter android:priority="1000">//设置为1000,保证提前接受广播 //电话状态改变时,发送的广播 (振铃,挂断,接通) <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver>
5、注意:android6.0以下可以正常运行
android6.0以上由于涉及到敏感权限,需要动态申请权限。