o Hoàn thành quá trình thu phát... o Hoàn thành quá trình thu... { case TelephonyManager.PHONE_TYPE_CDMA: break;case TelephonyManager.PHONE_TYPE_GSM : break; case TelephonyManager.PHONE_
Trang 1Audio – Video - Camera –
Telephone - SMS
Ch ng 12
Lê V n H nh
levanhanhvn@gmail.com
Trang 2N I DUNG
1 Gi i thi u v Media Player
2 Xây d ng Media Player Audio & Video
3 Các đi u khi n trên Media Player
4 Recoding Audio & Video
5 i u khi n ch p hình v i Camera
6 L u t p tin media vào Media Store
7 Telephone
8 SMS
Trang 31 GI I THI U V MEDIAPLAYER
• Android cung c p l p MediaPlayer đ qu n lý các tác
v đa truy n thông bao g m các t p tin âm thanh, hình
nh, video
• Có th truy xu t các t p tin media thông qua vi c l u
tr nh tài nguyên ng d ng, b nh thi t b , content
provider ho c thông qua URL
• MediaPlayer qu n lý các t p tin media và lu ng x lý
thông qua m t t p các tr ng thái sau:
o Kh i t o đ i t ng MediaPlayer.
o Chu n b b thu phát MediaPlayer.
o B t đ u th c hi n thu phát
o Th c hi n các thao tác Pause và Stop trên t p tin
media trong khi đang thu phát
o Hoàn thành quá trình thu phát
Trang 42 XỂY D NG MEDIAPLAYER AUDIO
• Android h tr truy xu t các t p tin Audio thông qua các l u
tr nh : tài nguyên ng d ng, b nh thi t b , content
provider và x lý các lu ng URL.
• Có th đóng gói t p tin Audio vào th m c res/raw nh m t
d ng tài nguyên c a ng d ng.
• thu phát m t t p tin Audio c n t o m t đ i t ng
MediaPlayer và thi t l p ngu n d li u cho đ i t ng này.
• Th c hi n thu phát b ng ph ng th c Create() truy n vào 2
tham s : context c a ng d ng và m t trong nh ng d ng tài
nguyên sau:
o nh danh c a tài nguyên.
o URI tr đ n n i l u tr c a t p tin trên thi t b
o URI tr đ n t p tin tr c tuy n thông qua URL.
o URI tr đ n dòng d li u trong b ng c a content provider.
Trang 5• th c thi vi c thu phát t p tin video c n t o m t màn
hình cho vi c trình chi u Có hai cách đ th c hi n công
vi c này:
o S d ng thành ph n Video View, đóng gói các thao
tác trên đ i t ng MediaPlayer (t o trình chi u,
chu n b và c p phát t p tin) vào trong thành ph n
View này
o Xây d ng màn hình hi n th riêng và g n k t d li u
thông qua đ i t ng MediaPlayer.
Trang 6• Ví d t o đ i t ng MediaPlayer
• Ví d t o b thu phát b ng Video View
Trang 7• Ví d t o màn hình hi n th trong Video View
Trang 8• T o đ i t ng Surface Holder đ h tr vi c c p nh t
các ngu n x lý bên d i
Trang 9• Kh i t o n i dung c a t p tin c n trình chi u
Trang 103 CÁC I U KHI N TRểN MEDIAPLAYER
• Kh i ch y đ i t ng b ng ph ng th c start().
Vd: Mediaplayer mediaPlayer = new MediaPlayer();
mediaPlayer.start();
• MediaPlayer cung c p m t s ph ng th c cho vi c
đi u khi n nh getDuration, getCurrentPositon, seekTo
Vd:
Trang 12• Android cung c p 2 l a ch n trong vi c thu âm thanh và
hình nh:
o S d ng Intent đ kh i ch y ng d ng Video
Camera L a ch n này cho phép ch đ nh n i l u tr ,
đ nh d ng và ch t l ng c a hình nh thu đ c
o S d ng l p Media Recoder đ xây d ng các thành
ph n UI, các thi t l p record cho ng d ng
Trang 13• S d ng Intent đ thu hình nh: b ng cách truy n action
ACTION_VIDEO_CAPTURE vào m t Intent và g i
Intent này đ n m t Activity khác x lý và tr v k t qu
o EXTRA_OUPUT: cho phép tùy ch n n i l u tr
o EXTRA_VIDEO_QUALITY: cho phép tùy ch n
ch t l ng hình nh thu đ c
Trang 14• Ví d s d ng Intent đ thu hình nh
Trang 15• S d ng Media Recorder đ thu âm thanh và hình nh:
c n t o đ i t ng thu c l p MediaRecoder đ s d ng.Vd: MediaRecoder mediaRecorder = new MediaRecorder();
• C n đ ng ký quy n s d ng cho ng d ng trong file
AndroidManifest.xml
Trang 16• MediaRecoder qu n lý các t p tin media và lu ng x lý
thông qua m t t p các tr ng thái sau:
o Kh i t o đ i t ng MediaPlayer
o Ch đ nh ngu n vào c a thi t b thu
o Thi t l p đ nh d ng c a t p tin đ u ra
o Thi t l p các ch s nh : b mã hóa, ch t l ng hình
nh, dung l ng xu t ra
o Ch n t p tin đ xu t
o Chu n b thu âm & hình nh
o Ti n hành thu âm & hình nh
o Hoàn thành quá trình thu
Trang 17• Ví d t o MediaRecorder
Trang 18• Ti n hành thu, d ng thu và gi i phóng tài nguyên
• T o màn hình Preview trong lúc record
Trang 19• T o màn hình Preview trong lúc record
Trang 21• Ví d s d ng Intent đ l y v d li u c a
ACTION_IMAGE_CAPTURE
Trang 22• Nh n k t qu tr v và x lý
Trang 23• C n đ ng ký trong file AndroidManifest đ s d ng
Camera
• Kh i t o đ i t ng Camera đ tùy ch nh và s d ng
Trang 24• Tùy ch nh Camera thông qua đ i t ng c a Parameter
Trang 25• T o màn hình Preview
Trang 26• T o màn hình Preview
Trang 27• Ví d ti n hành ch p nh và l u trên SDCard
Trang 28• Ví d ti n hành ch p nh và l u trên SDCard
Trang 296 L U T P TIN MEDIA VÀO MEDIASTORE
• Có th l u t p tin media vào MediaStore b ng 2 cách:
o S d ng MediaScanner đ thông d ch t p tin vào thêm vào
Trang 30• Ví d thêm media b ng Content Provider
Trang 31• T o cu c g i b ng các s d ng Intent đ g i Dialer có
s n trong thi t b
Vd: Intent intent = new Intent(Intetn.ACTION_DIAL,
Uri.parse(“tel:123456”)); startActivity(intent);
• Th c hi n hành đ ng g i ACTION_CALL b ng cách
nh n nút Call trong thi t b
• M t s thông tin c n thi t cho vi c qu n lý ch c n ng
Phone trên thi t b :
Trang 32{ case (TelephonyManager.PHONE_TYPE_CDMA): break;
case (TelephonyManager.PHONE_TYPE_GSM) : break;
case (TelephonyManager.PHONE_TYPE_NONE): break;
Trang 33super.onCallStateChanged(state, incomingNumber); switch(state)
{
case TelephonyManager.CALL_STATE_IDLE : break; case TelephonyManager.CALL_STATE_RINGING : break; case TelephonyManager.CALL_STATE_OFFHOOK : break;
default: break;
} }
………
}
Trang 34• c d li u k t n i và các thay đ i tr ng thái thông qua
các ph ng th c getDataSet() và getDataActivity().
Trang 35• c các d li u Network c n thi t:
String networkCountry = telephonyManager.getNetworkCountryIso() ;
String networkOperatorId = telephonyManager.getNetworkOperator() ;
String networkName = telephonyManager.getNetworkOperatorName(); int networkType = telephonyManager.getNetworkType();
switch (networkType) {
case (TelephonyManager.NETWORK_TYPE_1xRTT) : break; case (TelephonyManager.NETWORK_TYPE_CDMA) : break; case (TelephonyManager.NETWORK_TYPE_EDGE) : break; case (TelephonyManager.NETWORK_TYPE_EVDO_0) : break; case (TelephonyManager.NETWORK_TYPE_EVDO_A) : break; case (TelephonyManager.NETWORK_TYPE_GPRS) : break; case (TelephonyManager.NETWORK_TYPE_HSDPA) : break; case (TelephonyManager.NETWORK_TYPE_HSPA) : break; case (TelephonyManager.NETWORK_TYPE_HSUPA) : break; case (TelephonyManager.NETWORK_TYPE_UMTS) : break; case (TelephonyManager.NETWORK_TYPE_UNKNOWN) : break; default: break;
}
Trang 36{ String simCountry = telephonyManager.getSimCountryIso();
String simOperatorCode =
telephonyManager.getSimOperator(); String simOperatorName =
telephonyManager.getSimOperatorName(); String simSerial =
telephonyManager.getSimSerialNumber(); break;
}
default: break;
}
Trang 37• Các thay đ i tr ng thái phone đ c qu n lý b i l p
PhoneStateListener
PhoneStateListener phoneStateListener = new PhoneStateListener()
{
public void onCallForwardingIndicatorChanged(boolean cfi) {}
public void onCallStateChanged(int state, String incomingNumber) {} public void onCellLocationChanged(CellLocation location) {}
public void onDataActivity(int direction) {}
public void onDataConnectionStateChanged(int state) {}
public void onMessageWaitingIndicatorChanged(boolean mwi) {}
public void onServiceStateChanged(ServiceState serviceState) {}
public void onSignalStrengthChanged(int asu) {}
}
Trang 38• C n đ ng ký v i Telephony Manager đ kh i t o các s
ki n mu n l ng nghe đ x lý:
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR| PhoneStateListener.LISTEN_CALL_STATE |
PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_DATA_ACTIVITY | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR | PhoneStateListener.LISTEN_SERVICE_STATE |
PhoneStateListener.LISTEN_SIGNAL_STRENGTH);
• H y đ ng ký b ng LISTEN_NONE
telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_NONE);
Trang 40• Ví d đ ng kí trong Intent trong AndroidManifest
Trang 41• Ví d x lý cu c g i t i
Trang 42• G i tin nh n MMS có ch a t p tin Media
Vd: //T o tin nh n MMS
Uri attached_Uri =
Uri.parse("content://media/external/images/media/1"); Intent mmsIntent = new
Intent(Intent.ACTION_SEND,attached_Uri); mmsIntent.putExtra("sms_body",
"Please see the attached image"); mmsIntent.putExtra("address", "07912355432");
mmsIntent.putExtra(Intent.EXTRA_STREAM, attached_Uri); mmsIntent.setType("image/png");
startActivity(mmsIntent);
Trang 43• G i tin nh n MMS có ch a t p tin Media
Vd: //T o tin nh n MMS
Uri attached_Uri =
Uri.parse("content://media/external/images/media/1"); Intent mmsIntent = new
Intent(Intent.ACTION_SEND,attached_Uri); mmsIntent.putExtra("sms_body",
"Please see the attached image"); mmsIntent.putExtra("address", "07912355432");
mmsIntent.putExtra(Intent.EXTRA_STREAM, attached_Uri);
mmsIntent.setType("image/png");
startActivity(mmsIntent);
Trang 44• SMS tin nh n đ c đi u khi n b i SmsManager
o T o đ i t ng SmsManager
SmsManager smsManager = SmsManager.getDefault();
o Yêu c u quy n truy c p khi g i tin nh n
PendingIntent sentIntent, PendingIntent deliveryIntent)
Vd:
Trang 45• Theo dõi, xác nh n SMS tin nh n đã đ c g i b ng cách
đ ng ký BroadcastReceiver đ l ng nghe các ho t đ ng t
Pending Itent đ c t o khi g i tin nh n
o sentItent đ c g i lên khi tin nh n đ c g i thành
công hay l i
Activity.RESULT_OK SmsManager.RESULT_ERROR_GENERIC_FAILURE SmsManager.RESULT_ERROR_RADIO_OFF
SmsManager.RESULT_ERROR_NULL_PDU
o deliveryIntent đ c g i lên m t khi thi t b đích nh n
đ c tin nh n
Trang 46• Ví d v ki m soát g i tin nh n: t o Pending Intent
String SENT_SMS_ACTION = "SENT_SMS_ACTION " ;
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION " ;
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sentPI =
PendingIntent.getBroadcast(getApplicationContext(),0,
sentIntent,0); Intent deliveryIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent deliverPI =
PendingIntent.getBroadcast(getApplicationContext(),0,
deliveryIntent,0);
Trang 47• Ví d v ki m soát g i tin nh n: t o Broadcast Receiver
case Activity.RESULT_OK : break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: break; case SmsManager.RESULT_ERROR_RADIO_OFF : break; case SmsManager.RESULT_ERROR_NULL_PDU : break; }
}
},new IntentFilter(SENT_SMS_ACTION));
Trang 48• Ví d v ki m soát g i tin nh n: t o Broadcast Receiver
}, new IntentFilter(DELIVERED_SMS_ACTION));
smsManager.sendTextMessage(sendTo, null, myMessage, sentPI,
deliverPI);
Trang 49• X lý các tin nh n dài h n 160 ký t b ng ph ng th cdivideMessage() và sendMultipartTextMessage().
o Cú pháp:
sendMultipartTextMessage(Stringdestination Address,
String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)
o Ví d :
ArrayList<String> messageArray =
smsManager.divideMessage(myMessage); ArrayList<PendingIntent> sentIntents = new
ArrayList<PendingIntent>(); for (int i = 0; i < messageArray.size(); i++)
sentIntents.add(sentPI);
smsManager.sendMultipartTextMessage(sendTo, null,
messageArray sentIntents, null);
Trang 50• G i tin nh n ch a d li u b ng m ng byte
o Cú pháp:
sendDataMessage(Stringdestination Address,
String scAddress, short destination Port, byte[] data,
PendingIntent sentIntent, PendingIntent deliveryIntent)
byte[] data = [ your data ];
smsManager.sendDataMessage(sendTo, null, destinationPort,
data, sentPI, null);
Trang 51• ng d ng nh n đ c SMS, c n đ ng kýBroadcastReceiver v i action
Trang 52• Ví d t o Broadcast Receiver đ nh n tin nh n
Trang 54• Ví d truy v n l y n i dung các tin nh n trong Inbox.