日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android四大組件應(yīng)用系列——實(shí)現(xiàn)電話攔截和電話錄音

使用BordercastReceiver和Service組件實(shí)現(xiàn)下述功能:

在大安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),大安網(wǎng)站建設(shè)費(fèi)用合理。

1.當(dāng)手機(jī)處于來電狀態(tài),啟動(dòng)監(jiān)聽服務(wù),對來電進(jìn)行監(jiān)聽錄音。

2.設(shè)置電話黑名單,當(dāng)來電是黑名單電話,則直接掛斷。

當(dāng)撥打電話或電話狀態(tài)發(fā)生改變時(shí),系統(tǒng)就會(huì)發(fā)出有序廣播,因此我們可以使用BordercastReceiver接受廣播,因BordercastReceiver執(zhí)行時(shí)間短不能執(zhí)行耗時(shí)任務(wù)也不能使用子線程,因此我們應(yīng)啟動(dòng)一個(gè)Service來監(jiān)聽電話并進(jìn)行處理
二、加入AIDL文件

Android沒有對外公開結(jié)束通話的API,要結(jié)束通話就必須使用AIDL與電話管理服務(wù)進(jìn)行通信,并調(diào)用服務(wù)中的API實(shí)現(xiàn)結(jié)束通話,這樣需要android 源碼文件NeighboringCellInfo.aidl和ITelephony.aidl添加到項(xiàng)目中,如圖所示:

Android Studio 會(huì)自動(dòng)編譯產(chǎn)生對應(yīng)的類文件
三、編寫TelReceiver組件

 
 
 
  1. public class TelReceiver extends BroadcastReceiver { 
  2. public TelReceiver() { 
  3.  
  4. @Override 
  5. public void onReceive(Context context, Intent intent) { 
  6. Intent i=new Intent(context,ListenPhoneService.class); 
  7. i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
  8. i.setAction(intent.getAction()); 
  9. i.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, 
  10. intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER));//電話號(hào)碼 
  11. i.putExtra(TelephonyManager.EXTRA_STATE, 
  12. intent.getStringExtra(TelephonyManager.EXTRA_STATE));//電話狀態(tài) 
  13. context.startService(i);//啟動(dòng)服務(wù) 
  14. }

注冊廣播:

 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
四、編寫ListenPhoneService組件
 
 
 
  1. public class ListenPhoneService extends Service { 
  2. private AudioManager mAudioManager; 
  3. private TelephonyManager tm; 
  4. public ListenPhoneService() { 
  5.  
  6. @Override 
  7. public void onCreate() { 
  8. super.onCreate(); 
  9. mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
  10. tm=(TelephonyManager)getSystemService(Service.TELEPHONY_SERVICE); 
  11. @Override 
  12. public int onStartCommand(Intent intent, int flags, int startId) { 
  13. if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){//去電廣播,android沒有來電話廣播 
  14. }else{//去掉撥打電話就是來電狀態(tài)了 
  15. //方法1 
  16. //獲得來電電話 
  17. // String number=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
  18. //獲得電話狀態(tài) 
  19. // String state=intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
  20. // Log.d("jereh", "incoming phone:" + number); 
  21. // Log.d("jereh","call state:"+state); 
  22. // TelephonyManager.EXTRA_STATE_IDLE: 沒有來電 或者 掛斷 
  23. // TelephonyManagerEXTRA_STATE_OFFHOOK: 接起電話 
  24. // TelephonyManager.EXTRA_STATE_RINGING:當(dāng)電話呼入時(shí),響鈴時(shí) 
  25. // if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ 
  26. // if(number.equals("13280998858")){//攔截指定的電話號(hào)碼 
  27. // mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
  28. // Log.d("jereh","電話被攔截"); 
  29. // stopCall(); 
  30. // mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);//恢復(fù)鈴聲 
  31. // } 
  32. // }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ 
  33. //接起電話 
  34. // recordCall();//開始錄音 
  35. // }else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){ 
  36. // stopCall();//停止錄音 
  37. // } 
  38. //方法2 
  39. // 設(shè)置一個(gè)監(jiān)聽器,監(jiān)聽電話狀態(tài) 
  40. tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE); 
  41.  
  42. return super.onStartCommand(intent, flags, startId); 
  43.  
  44. /** 
  45. * 掛斷電話 
  46. */ 
  47. private void stopCall(){ 
  48. try { 
  49. //Android的設(shè)計(jì)將ServiceManager隱藏了,所以只能使用反射機(jī)制獲得。 
  50. Method method=Class.forName("android.os.ServiceManager").getMethod("getService", String.class); 
  51. IBinder binder=(IBinder)method.invoke(null, new Object[]{"phone"});//獲得系統(tǒng)電話服務(wù) 
  52. ITelephony telephoney=ITelephony.Stub.asInterface(binder); 
  53. telephoney.endCall();//掛斷電話 
  54. stopSelf();//停止服務(wù) 
  55. } catch (Exception e) { 
  56. e.printStackTrace(); 
  57. PhoneStateListener listener=new PhoneStateListener(){ 
  58. @Override 
  59. public void onCallStateChanged(int state,String incomingNumber){ 
  60. switch (state){ 
  61. //手機(jī)空閑了 
  62. case TelephonyManager.CALL_STATE_IDLE: 
  63. stopCall();//停止錄音 
  64. break; 
  65. //接起電話 
  66. case TelephonyManager.CALL_STATE_OFFHOOK: 
  67. recordCall();//開始錄音 
  68. break; 
  69. // 響鈴時(shí) 
  70. case TelephonyManager.CALL_STATE_RINGING: 
  71. Log.e("jereh", "來電號(hào)碼是:"+ incomingNumber); 
  72. // 如果該號(hào)碼屬于黑名單 
  73. if (incomingNumber.equals("123456")) { 
  74. // 如果是黑名單,就進(jìn)行屏蔽 
  75. stopCall(); 
  76. break; 
  77. }; 
  78.  
  79. /** 
  80. * 停止錄音 
  81. */ 
  82. private void stopRecord(){ 
  83. if(recording){ 
  84. recorder.stop(); 
  85. recorder.release(); 
  86. recording=false; 
  87. stopSelf();//停止服務(wù) 
  88. /** 
  89. * 電話錄音 
  90. */ 
  91. private MediaRecorder recorder; 
  92. private boolean recording ; 
  93. private void recordCall(){ 
  94. Log.d("jereh", "record calling") 
  95. if( Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
  96. recorder=new MediaRecorder(); 
  97. recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//讀麥克風(fēng)的聲音 
  98. recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//設(shè)置輸出格式 
  99. recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 編碼方式 
  100. File file=new File(Environment.getDownloadCacheDirectory().getAbsolutePath(),"recorder"); 
  101. if(!file.exists()){ 
  102. file.mkdir(); 
  103. recorder.setOutputFile(file.getAbsolutePath() + "/" 
  104. + System.currentTimeMillis() + "3gp");// 存放的位置是放在sd卡recorder目錄下 
  105. try { 
  106. recorder.prepare(); 
  107. recorder.start(); 
  108. recording=true; 
  109.  
  110. } catch (IOException e) { 
  111. e.printStackTrace(); 
  112. @Override 
  113. public IBinder onBind(Intent intent) { 
  114. throw new UnsupportedOperationException("Not yet implemented"); 
  115.  
  116. 復(fù)制代碼 
  117.  
  118. Service XML配置 
  119.  
  120. android:name=".ListenPhoneService" 
  121. android:enabled="true" 
  122. android:exported="true" > 
  123.  

五、***別忘了一些權(quán)限的設(shè)置

 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  

網(wǎng)頁題目:Android四大組件應(yīng)用系列——實(shí)現(xiàn)電話攔截和電話錄音
網(wǎng)頁URL:http://www.5511xx.com/article/djhccci.html