1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Android nâng cao: Bài 3 - Trương Xuân Nam

55 36 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bài giảng Android nâng cao: Bài 3 Telephony + Media Services cung cấp cho người học những kiến thức như: Làm việc với điện thoại; Tạo và nhận cuộc gọi; Media Services (part I). Mời các bạn cùng tham khảo!

MobiPro ANDROID NÂNG CAO BÀI 3: Telephony + Media Services MobiPro Nội dung Telephony API Làm việc với điện thoại SMS • Gửi SMS • Nhận SMS • Đọc SMS Tạo nhận gọi Media Services (part I) Media API MediaStore Audio TRƯƠNG XUÂN NAM MobiPro Phần 1.1 Làm việc với điện thoại TRƯƠNG XUÂN NAM MobiPro Làm việc với điện thoại  Không phải thiết bị Android có tính thoại, cần sử dùng tính đó, ta cần thiết lập u cầu AndroidManifest.xml  Chú ý: thiết lập thuộc tính ứng dụng không cài đặt thiết bị phần cứng hỗ trợ điện thoại TRƯƠNG XUÂN NAM MobiPro Làm việc với điện thoại  Muốn đọc trạng thái phone, phải cấp quyền  Android OS có service hệ thống để theo dõi trạng thái thoại, lấy service getSystemService – Dùng service này, ta lấy thơng tin phone state, chẳng hạn đọc số điện thoại gọi đến  Link API TelephonyManager: http://developer.android.com/reference/android/telep hony/TelephonyManager.html TRƯƠNG XUÂN NAM MobiPro Ví dụ TelephonyManager TRƯƠNG XUÂN NAM MobiPro Làm việc với điện thoại  Việc lắng nghe thay đổi trạng thái gọi giúp ứng dụng có phù hợp với nhu cầu người dùng Ví dụ như: – Game tự động tạm dừng lưu thông tin trạng thái điện thoại đổ chng để người dùng trả lời gọi cách an toàn – Ứng dụng chơi nhạc vặn nhỏ tạm dừng âm  Muốn tương tác tốt hơn, chặn kiện CallStateChange TelephonyManager có cách xử lý phù hợp TRƯƠNG XUÂN NAM MobiPro Xử lý PHONE_STATE_CHANGE TRƯƠNG XUÂN NAM MobiPro Xử lý PHONE_STATE_CHANGE TRƯƠNG XUÂN NAM MobiPro Phần 1.2 SMS TRƯƠNG XUÂN NAM 10 MobiPro Chơi audio từ File/Stream  Khởi tạo MediaPlayer thông qua hàm khởi tạo  Gọi phương thức setDataSource(string url) với url địa file hay đường dẫn internet  Gọi phương thức prepare() để khởi tạo codec phù hợp  Gọi phương thức start() để bắt đầu chơi  Khi muốn tạm dừng hay dừng hẳn gọi phương thức pause() hay stop() TRƯƠNG XUÂN NAM 41 MobiPro MediaPlayer – example TRƯƠNG XUÂN NAM 42 MobiPro Một số ý playback  MediaPlayer cần reset release chơi lại trước bạn stop  MediaPlayer chạy ngầm, bạn đóng activity (finish) audio chạy ngầm (và khơng có cách dừng nó), nên dùng System.exit để kết thúc ứng dụng  Có thể chơi lúc nhiều MediaPlayer thiết lập mức volume khác nguồn khác cho MediaPlayer (ví dụ chơi file audio file đổ âm phía tai nghe) TRƯƠNG XUÂN NAM 43 MobiPro Một số ý playback  Muốn ứng dụng chạy ngầm sau ứng dụng quay trở lại tiếp tục điều khiển Audio cũ, ta nên sử dụng service  Muốn tương tác với phím điều khiển âm lượng: – Đăng kí broadcast receiver: android.intent.action.MEDIA_BUTTON – Điều chỉnh âm phương thức setVolume(left, right), giá trị left/right số thực nằm khoảng từ 0.0f đến 1.0f  Sử dụng AudioManager trường hợp muốn tương tác nhiều với phần cứng audio TRƯƠNG XUÂN NAM 44 MobiPro Audio Recording  Để ghi âm, sử dụng MediaRecorder Khởi tạo đối tượng recorder thông qua hàm khởi tạo Khởi tạo đối tượng android.content.ContentValues, truyền giá trị TITLE, TIMESTAMP MIME_TYPE để lưu trữ Tạo đường dẫn đến file lưu trữ Thiết lập audio source với MediaRecorder.setAudioSource() MediaRecorder.setAudioSource.MIC TRƯƠNG XUÂN NAM 45 MobiPro Audio Recording Cấu hình kiểu format MediaRecorder.setOutputFormat() Kiểu mã hóa MediaRecorder.setAudioEncoder() Gọi phương thức prepare() để chuẩn bị Bắt đầu ghi âm với phương thức start() dừng với stop() Khi kết thúc gọi release() để giải phóng nhớ TRƯƠNG XUÂN NAM 46 MobiPro Audio Recording TRƯƠNG XUÂN NAM 47 MobiPro Audio Recording – example TRƯƠNG XUÂN NAM 48 MobiPro Audio Recording – example public class MyAudioRecorder extends Activity { MediaRecorder myRecorder; File mSampleFile = null; TextView txtMsg; static final String SAMPLE_PREFIX = "Recording"; static final String SAMPLE_EXTENSION = ".mp3"; private static final String TAG = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txtMsg = (TextView)findViewById(R.id.txtMsg); myRecorder = new MediaRecorder(); TRƯƠNG XUÂN NAM 49 MobiPro Audio Recording – example Button start = (Button) findViewById(R.id.startRecording); start.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startRecording(); } }); Button stop = (Button) findViewById(R.id.stopRecording); stop.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopRecording(); addToMediaStoreDB(); } }); TRƯƠNG XUÂN NAM 50 MobiPro Audio Recording – example Button play = (Button) findViewById(R.id.playRecording); play.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try { String name = mSampleFile.getAbsolutePath(); txtMsg.setText("Now playing:\n " + name); MediaPlayer mp = new MediaPlayer(); mp.setDataSource( recordingName ); mp.prepare(); mp.start(); } catch (Exception e) {} } } } // onCreate TRƯƠNG XUÂN NAM 51 MobiPro Audio Recording – example protected void startRecording() { try { if (this.mSampleFile == null) { File dir = Environment.getExternalStorageDirectory(); try { this.mSampleFile = File.createTempFile( MyAudioRecorder.SAMPLE_PREFIX, MyAudioRecorder.SAMPLE_EXTENSION, dir); } catch (IOException e) { return; } } txtMsg.setText("Recording: \n" + mSampleFile.getCanonicalPath()); TRƯƠNG XUÂN NAM 52 MobiPro Audio Recording – example myRecorder = new MediaRecorder(); myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myRecorder.setOutputFormat(MediaRecorder.OutputFormat THREE_GPP); myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder AMR_NB); myRecorder.setOutputFile(this.mSampleFile getAbsolutePath()); myRecorder.prepare(); myRecorder.start(); } catch (Exception e) { } } // startRecording TRƯƠNG XUÂN NAM 53 MobiPro Audio Recording – example protected void stopRecording() { try { myRecorder.stop(); myRecorder.release(); } catch (IllegalStateException e) {} } protected void addToMediaStoreDB() { try { int now = (int) (System.currentTimeMillis() / 1000); ContentValues newValues = new ContentValues(6); newValues.put(MediaColumns.TITLE, mSampleFile.getName()); newValues.put(MediaColumns.DATE_ADDED, now); TRƯƠNG XUÂN NAM 54 MobiPro Audio Recording – example newValues.put(MediaColumns.MIME_TYPE, "audio/mpeg"); newValues.put(AudioColumns.IS_MUSIC, true); newValues.put(AudioColumns.ARTIST, "myself"); newValues.put(MediaColumns.DATA, mSampleFile.getAbsolutePath()); ContentResolver contentResolver = getContentResolver(); Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Uri nUri = contentResolver.insert(base, newValues); sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, nUri)); } catch (Exception e) { } } // addToMediaStoreDB TRƯƠNG XUÂN NAM 55 ... có cách xử lý phù hợp TRƯƠNG XUÂN NAM MobiPro Xử lý PHONE_STATE_CHANGE TRƯƠNG XUÂN NAM MobiPro Xử lý PHONE_STATE_CHANGE TRƯƠNG XUÂN NAM MobiPro Phần 1.2 SMS TRƯƠNG XUÂN NAM 10 MobiPro SMS – Các... Gửi, Nhận Đọc

Ngày đăng: 09/08/2021, 17:36

Xem thêm:

TỪ KHÓA LIÊN QUAN