亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android應(yīng)用開(kāi)發(fā):電話(huà)監(jiān)聽(tīng)和錄音代碼示例

 更新時(shí)間:2014年04月08日 10:10:45   作者:  
這篇文章主要介紹了Android應(yīng)用開(kāi)發(fā)中電話(huà)監(jiān)聽(tīng)和電話(huà)錄音的代碼實(shí)例,同時(shí)附錄了一個(gè)拍照、錄像的例子,需要的朋友可以參考下

在oncreate 中執(zhí)行:

復(fù)制代碼 代碼如下:

public void onCreate() {
  super.onCreate();
  Log.i("TAG", "服務(wù)啟動(dòng)了");

  // 對(duì)電話(huà)的來(lái)電狀態(tài)進(jìn)行監(jiān)聽(tīng)
  TelephonyManager telManager = (TelephonyManager) this
    .getSystemService(Context.TELEPHONY_SERVICE);
  // 注冊(cè)一個(gè)監(jiān)聽(tīng)器對(duì)電話(huà)狀態(tài)進(jìn)行監(jiān)聽(tīng)
  telManager.listen(new MyPhoneStateListener(),
    PhoneStateListener.LISTEN_CALL_STATE);
}


實(shí)現(xiàn)MyPhoneStateListener:
復(fù)制代碼 代碼如下:

private class MyPhoneStateListener extends PhoneStateListener {
  MediaRecorder recorder;
  File audioFile;
  String phoneNumber;

  public void onCallStateChanged(int state, String incomingNumber) {
   switch (state) {
   case TelephonyManager.CALL_STATE_IDLE: /* 無(wú)任何狀態(tài)時(shí) */
    if (recorder != null) {
     recorder.stop(); //停止刻錄
     recorder.reset(); //重設(shè)
     recorder.release(); //刻錄完成一定要釋放資源
    }
    break;
   case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起電話(huà)時(shí) */

    try {
     recorder = new MediaRecorder();
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設(shè)置音頻采集原
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //內(nèi)容輸出格式
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //音頻編碼方式

     // recorder.setOutputFile("/sdcard/myvoice.amr");
     audioFile = new File(
       Environment.getExternalStorageDirectory(),
       phoneNumber + "_" + System.currentTimeMillis()
         + ".3gp");
     recorder.setOutputFile(audioFile.getAbsolutePath());
     Log.i("TAG", audioFile.getAbsolutePath());

     recorder.prepare(); //預(yù)期準(zhǔn)備
     recorder.start();

    } catch (IllegalStateException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }

    break;
   case TelephonyManager.CALL_STATE_RINGING: /* 電話(huà)進(jìn)來(lái)時(shí) */
    phoneNumber = incomingNumber;
    break;
   default:
    break;
   }
   super.onCallStateChanged(state, incomingNumber);
  }
 }


通過(guò)上續(xù)兩個(gè)對(duì)應(yīng)的步驟即可以實(shí)現(xiàn)通過(guò)server對(duì)電話(huà)的監(jiān)聽(tīng)工作,在CALL_STATE_IDLE無(wú)狀態(tài)(即空閑狀態(tài))、CALL_STATE_OFFHOOK 接通電話(huà)(即掛起)、CALL_STATE_RINGING 電話(huà)進(jìn)來(lái)(即來(lái)電時(shí))這幾個(gè)狀態(tài)中執(zhí)行。

附:Android拍照、錄像、錄音代碼范例

復(fù)制代碼 代碼如下:

package com.cons.dcg.collect;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;
import android.app.*;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.*;
import android.widget.*;

public class RecordActivity extends Activity implements OnClickListener {

        private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode
        private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 攝像的照相的requestCode
        private static final int RESULT_CAPTURE_RECORDER_SOUND = 3;// 錄音的requestCode

        private String strImgPath = "";// 照片文件絕對(duì)路徑
        private String strVideoPath = "";// 視頻文件的絕對(duì)路徑
        private String strRecorderPath = "";// 錄音文件的絕對(duì)路徑

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.setContentView(R.layout.problem_report);
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                switch (requestCode) {
                case RESULT_CAPTURE_IMAGE://拍照
                        if (resultCode == RESULT_OK) {
                                Toast.makeText(this, strImgPath, Toast.LENGTH_SHORT).show();
                        }
                        break;
                case REQUEST_CODE_TAKE_VIDEO://拍攝視頻
                        if (resultCode == RESULT_OK) {
                                Uri uriVideo = data.getData();
                                Cursor cursor=this.getContentResolver().query(uriVideo, null, null, null, null);
                                if (cursor.moveToNext()) {
                                        /** _data:文件的絕對(duì)路徑 ,_display_name:文件名 */
                                        strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));
                                        Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();
                                }
                        }
                        break;
                case RESULT_CAPTURE_RECORDER_SOUND://錄音
                        if (resultCode == RESULT_OK) {
                                Uri uriRecorder = data.getData();
                                Cursor cursor=this.getContentResolver().query(uriRecorder, null, null, null, null);
                                if (cursor.moveToNext()) {
                                        /** _data:文件的絕對(duì)路徑 ,_display_name:文件名 */
                                        strRecorderPath = cursor.getString(cursor.getColumnIndex("_data"));
                                        Toast.makeText(this, strRecorderPath, Toast.LENGTH_SHORT).show();
                                }
                        }
                        break;
                }
        }

      

        /**
         * 照相功能
         */
        private void cameraMethod() {
                Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                strImgPath = Environment.getExternalStorageDirectory().toString() + "/CONSDCGMPIC/";//存放照片的文件夾
                String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";//照片命名
                File out = new File(strImgPath);
                if (!out.exists()) {
                        out.mkdirs();
                }
                out = new File(strImgPath, fileName);
                strImgPath = strImgPath + fileName;//該照片的絕對(duì)路徑
                Uri uri = Uri.fromFile(out);
                imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);

        }

        /**
         * 拍攝視頻
         */
        private void videoMethod() {
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
                startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);
        }

        /**
         * 錄音功能
         */
        private void soundRecorderMethod() {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("audio/amr");
                startActivityForResult(intent, RESULT_CAPTURE_RECORDER_SOUND);
        }

        /**
         * 提示信息
         * @param text
         * @param duration
         */
        private void showToast(String text, int duration) {
                Toast.makeText(ProblemReport.this, text, duration).show();
        }
}

相關(guān)文章

  • Android實(shí)現(xiàn)簡(jiǎn)單的下拉刷新pulltorefresh

    Android實(shí)現(xiàn)簡(jiǎn)單的下拉刷新pulltorefresh

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單的下拉刷新pulltorefresh的相關(guān)代碼,具有一定的實(shí)用性和操作價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android Studio3.6設(shè)置Gradle Offline Mode的方法

    Android Studio3.6設(shè)置Gradle Offline Mode的方法

    這篇文章主要介紹了Android Studio3.6設(shè)置Gradle Offline Mode的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Kotlin try catch異常處理i詳解

    Kotlin try catch異常處理i詳解

    在 Kotlin 協(xié)程當(dāng)中,我們通常把異常分為兩大類(lèi),一類(lèi)是取消異常(CancellationException),另一類(lèi)是其他異常。在 Kotlin 協(xié)程當(dāng)中,這兩種異常的處理方式是不一樣的
    2022-11-11
  • Android基于訊飛語(yǔ)音SDK實(shí)現(xiàn)語(yǔ)音識(shí)別

    Android基于訊飛語(yǔ)音SDK實(shí)現(xiàn)語(yǔ)音識(shí)別

    本例子是一個(gè)調(diào)用訊飛語(yǔ)音識(shí)別SDK的例子源碼是一個(gè)最純凈的Demo比較容易看懂。實(shí)現(xiàn)的是點(diǎn)擊按鈕開(kāi)始語(yǔ)音監(jiān)聽(tīng),手機(jī)需要聯(lián)網(wǎng),2/3G的均可,希望本文對(duì)大家學(xué)習(xí)Android有所幫助
    2016-06-06
  • 詳解Android Checkbox的使用方法

    詳解Android Checkbox的使用方法

    這篇文章主要為大家詳細(xì)介紹了Android Checkbox的使用方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android?Studio中如何修改APP圖標(biāo)和APP名稱(chēng)

    Android?Studio中如何修改APP圖標(biāo)和APP名稱(chēng)

    這篇文章主要介紹了Android?Studio中如何修改APP圖標(biāo)和APP名稱(chēng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Android實(shí)現(xiàn)平滑翻動(dòng)效果

    Android實(shí)現(xiàn)平滑翻動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)平滑翻動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Android  RecyclerView詳解及簡(jiǎn)單實(shí)例

    Android RecyclerView詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Android RecyclerView詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Android Kotlin開(kāi)發(fā)實(shí)例(Hello World!)及語(yǔ)法詳解

    Android Kotlin開(kāi)發(fā)實(shí)例(Hello World!)及語(yǔ)法詳解

    這篇文章主要介紹了Android Kotlin開(kāi)發(fā)實(shí)例及語(yǔ)法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android自定義View實(shí)現(xiàn)彈幕效果

    Android自定義View實(shí)現(xiàn)彈幕效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)彈幕效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評(píng)論