亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android開發四大組件之實現電話攔截和電話錄音

2020-04-11 11:22:09
字體:
來源:轉載
供稿:網友

一、問題描述

  使用BordercastReceiver和Service組件實現下述功能:

1.當手機處于來電狀態,啟動監聽服務,對來電進行監聽錄音。

2.設置電話黑名單,當來電是黑名單電話,則直接掛斷。

  當撥打電話或電話狀態發生改變時,系統就會發出有序廣播,因此我們可以使用BordercastReceiver接受廣播,因BordercastReceiver執行時間短不能執行耗時任務也不能使用子線程,因此我們應啟動一個Service來監聽電話并進行處理

二、加入AIDL文件

  Android沒有對外公開結束通話的API,要結束通話就必須使用AIDL與電話管理服務進行通信,并調用服務中的API實現結束通話,這樣需要android 源碼文件NeighboringCellInfo.aidl和ITelephony.aidl添加到項目中,如圖所示:

Android Studio 會自動編譯產生對應的類文件

三、編寫TelReceiver組件

public class TelReceiver extends BroadcastReceiver { public TelReceiver() { } @Override public void onReceive(Context context, Intent intent) { Intent i=new Intent(context,ListenPhoneService.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setAction(intent.getAction()); i.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER,  intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER));//電話號碼 i.putExtra(TelephonyManager.EXTRA_STATE,  intent.getStringExtra(TelephonyManager.EXTRA_STATE));//電話狀態 context.startService(i);//啟動服務 }}

  注冊廣播:

<receiver android:name=".TelReceiver" > <intent-filter android:priority="1000" > <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter></receiver>

四、編寫ListenPhoneService組件

public class ListenPhoneService extends Service { private AudioManager mAudioManager; private TelephonyManager tm; public ListenPhoneService() { } @Override public void onCreate() { super.onCreate(); mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); tm=(TelephonyManager)getSystemService(Service.TELEPHONY_SERVICE); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){//去電廣播,android沒有來電話廣播 }else{//去掉撥打電話就是來電狀態了 //方法1//獲得來電電話// String number=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);//獲得電話狀態// String state=intent.getStringExtra(TelephonyManager.EXTRA_STATE);//  Log.d("jereh", "incoming phone:" + number);//  Log.d("jereh","call state:"+state);//  TelephonyManager.EXTRA_STATE_IDLE: 沒有來電 或者 掛斷//  TelephonyManagerEXTRA_STATE_OFFHOOK: 接起電話//  TelephonyManager.EXTRA_STATE_RINGING:當電話呼入時,響鈴時//  if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){//  if(number.equals("13280998858")){//攔截指定的電話號碼//  mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);//  Log.d("jereh","電話被攔截");//  stopCall();//   mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);//恢復鈴聲//  }//  }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ //接起電話//  recordCall();//開始錄音//  }else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){//  stopCall();//停止錄音//  } //方法2  // 設置一個監聽器,監聽電話狀態  tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE); } return super.onStartCommand(intent, flags, startId); } /** * 掛斷電話 */ private void stopCall(){ try {  //Android的設計將ServiceManager隱藏了,所以只能使用反射機制獲得。  Method method=Class.forName("android.os.ServiceManager").getMethod("getService", String.class);  IBinder binder=(IBinder)method.invoke(null, new Object[]{"phone"});//獲得系統電話服務  ITelephony telephoney=ITelephony.Stub.asInterface(binder);  telephoney.endCall();//掛斷電話  stopSelf();//停止服務 } catch (Exception e) {  e.printStackTrace(); } } PhoneStateListener listener=new PhoneStateListener(){ @Override public void onCallStateChanged(int state,String incomingNumber){  switch (state){  //手機空閑了  case TelephonyManager.CALL_STATE_IDLE:   stopCall();//停止錄音   break;  //接起電話  case TelephonyManager.CALL_STATE_OFFHOOK:   recordCall();//開始錄音   break;  // 響鈴時  case TelephonyManager.CALL_STATE_RINGING:   Log.e("jereh", "來電號碼是:"+ incomingNumber);   // 如果該號碼屬于黑名單   if (incomingNumber.equals("123456")) {   // 如果是黑名單,就進行屏蔽   stopCall();   }   break;  } } }; /** * 停止錄音 */ private void stopRecord(){ if(recording){  recorder.stop();  recorder.release();  recording=false;  stopSelf();//停止服務 } } /** * 電話錄音 */ private MediaRecorder recorder; private boolean recording ; private void recordCall(){ Log.d("jereh", "record calling") if( Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ recorder=new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//讀麥克風的聲音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//設置輸出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 編碼方式 File file=new File(Environment.getDownloadCacheDirectory().getAbsolutePath(),"recorder"); if(!file.exists()){  file.mkdir(); } recorder.setOutputFile(file.getAbsolutePath() + "/" + System.currentTimeMillis() + "3gp");// 存放的位置是放在sd卡recorder目錄下 try {  recorder.prepare();  recorder.start();  recording=true; } catch (IOException e) {  e.printStackTrace(); } } } @Override public IBinder onBind(Intent intent) {  throw new UnsupportedOperationException("Not yet implemented"); }}

Service XML配置

<service android:name=".ListenPhoneService" android:enabled="true" android:exported="true" ></service>

五、最后別忘了一些權限的設置

<!-- 添加訪問手機電話狀態的權限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 撥打電話權限 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- 監聽手機去電的權限 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<!-- 在SDCard中創建與刪除文件權限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard寫入數據權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

好了,以上就是本文的全部所述,希望對大家學習android四大基本組件有所幫助,謝謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美自拍视频在线| 亚洲欧美日韩图片| 成人a在线视频| 国产成人拍精品视频午夜网站| 亚洲性猛交xxxxwww| 欧美日韩综合视频| 国产情人节一区| 久久久精品国产| 精品久久久久久久久久ntr影视| 国产成人小视频在线观看| 日韩精品视频在线免费观看| 日本aⅴ大伊香蕉精品视频| 亚洲高清一二三区| 国产成人亚洲综合青青| 欧美性做爰毛片| 国产一区香蕉久久| 欧美色欧美亚洲高清在线视频| 久久中文字幕在线| 日韩国产高清视频在线| 亚洲最大的网站| 欧美老女人性生活| 成人精品久久av网站| 一区二区在线免费视频| 国内免费精品永久在线视频| 欧美老妇交乱视频| 久久久久久高潮国产精品视| 最新69国产成人精品视频免费| 亚洲精品综合久久中文字幕| 538国产精品一区二区在线| 国产婷婷色综合av蜜臀av| 日本精品va在线观看| 精品国产91久久久久久老师| 亚洲男人第一av网站| 欧美在线激情视频| 久久国产精品久久久久| 国产视频精品va久久久久久| 日韩男女性生活视频| 亚洲图片欧美日产| 国产免费一区视频观看免费| 久久国产精品免费视频| 欧美电影免费观看| 国产精品夜间视频香蕉| 亚洲人成网站777色婷婷| 久久久999国产| 成人久久久久久久| 久久亚洲精品中文字幕冲田杏梨| 亚洲影院在线看| 欧美日韩中文字幕综合视频| 国产精品美女主播在线观看纯欲| 日韩视频在线观看免费| 久久久久久中文| 欧美日韩成人在线视频| 亚洲福利视频二区| 久久精品福利视频| 国产精品吊钟奶在线| 日韩中文字幕免费| 欧美另类极品videosbestfree| 亚洲国产日韩欧美综合久久| 国产福利精品av综合导导航| 亚洲免费高清视频| 亚洲韩国青草视频| 欧美一区二区三区艳史| 久久久久久久激情视频| 国产精品欧美激情| 亚洲最大av在线| www国产精品视频| 欧美日韩色婷婷| 欧美黑人性猛交| 国产精品视频一区国模私拍| 欧美成年人网站| 久久婷婷国产麻豆91天堂| 久久久999国产精品| 亚洲tv在线观看| 久久久久久69| 91系列在线播放| 91免费的视频在线播放| 日韩精品在线播放| 久久久亚洲成人| 91免费在线视频| 久久精品青青大伊人av| 亚洲午夜未删减在线观看| 亚洲视频999| 欧美日韩性视频在线| 亚洲最大成人在线| 国产精品直播网红| 欧美一级电影免费在线观看| 色妞久久福利网| 亚洲在线一区二区| 中文字幕日韩精品在线观看| 夜夜嗨av色一区二区不卡| 午夜精品福利视频| 国产一区二区日韩精品欧美精品| 国产精品高潮呻吟视频| 欧美理论片在线观看| 91老司机精品视频| 欧美—级高清免费播放| 亚洲国产第一页| 国产欧美日韩精品在线观看| 国产精品黄色影片导航在线观看| 久久99国产精品自在自在app| 亚洲情综合五月天| 国产精品美女午夜av| 丝袜亚洲欧美日韩综合| 国产精品久久中文| 亚洲激情中文字幕| 国产精品直播网红| 亚洲国产精品yw在线观看| 欧美一级黄色网| 国产精品自拍小视频| 日韩电影网在线| 成人a级免费视频| 国产精品亚洲欧美导航| 亚洲欧美一区二区精品久久久| 久久偷看各类女兵18女厕嘘嘘| 久久精品夜夜夜夜夜久久| 午夜精品三级视频福利| 久久在线免费视频| 97香蕉超级碰碰久久免费的优势| 亚洲欧美日韩综合| 8050国产精品久久久久久| 亲子乱一区二区三区电影| 日韩精品免费在线视频观看| 一区二区成人精品| 久久91超碰青草是什么| 国产精品99久久99久久久二8| 成人a免费视频| 欧美成人免费全部| 亚洲高清久久网| 国产精品自产拍在线观看| 久久久久日韩精品久久久男男| 亚洲性av在线| 欧美精品在线免费观看| 欧美日韩免费观看中文| 国产亚洲免费的视频看| 欧美一级大片在线观看| 午夜免费日韩视频| 久久精品91久久久久久再现| 欧美激情在线观看视频| 亚洲精品天天看| 8x海外华人永久免费日韩内陆视频| 日韩欧美成人精品| 亚洲天堂av综合网| 夜夜嗨av一区二区三区免费区| 午夜精品国产精品大乳美女| 欧美理论电影在线观看| 欧美老女人在线视频| 亚洲欧美综合v| 欧美性在线观看| 午夜精品美女自拍福到在线| 亚洲精品99999| 国产精品高清网站| 日本韩国欧美精品大片卡二| 精品一区二区三区电影| 国产日韩精品视频| 久久久久久久久爱| 538国产精品一区二区免费视频| 国产精品18久久久久久麻辣| 欧美性xxxx极品hd满灌| 亚洲福利在线播放| 欧美性受xxxx黑人猛交| 欧美黑人性生活视频| 国产精品99免视看9| 亚洲第一页中文字幕| 欧美日韩在线视频一区|