====== Programming Mobile Applications for Android Handheld systems, Part 1 ======
Course page: https://class.coursera.org/androidpart2-001\\
By Dr. Adam Porter
Source code available at: https://github.com/aporter/coursera-androidc
===== Week 5 - Threads, AsyncTasks and Handlers, and Networking =====
==== Threads, AsyncTasks and Handlers ====
Provide notes on this course.
==== Networking ====
* Using HTTP get requests.
* Processing HTTP responses, with JSON and XML.
* Supoprt classes:
* Socket (java.net)
* using input/output streams
* HttpRequest and HttpResponse (in org.apache)
* Uri, AndroidHttpClient, AudioStream (in android.net)
* HttpUrlConnection
* using URL.openConnection()
* AndroidHttpClient
* create new instance with AndroidHttpClient.newInstance("")
* create HttpGet(URL)
* create ResponseHandler (BasicResponseHandler for instance)
* call client.execute(request, responseHandler);
* JSON format
* 2 types of structures:
* maps
* ordered lists
* XML format
* DOM (complete reading of the document object model)
* SAX (stream reading with callbacks) parsers.
* PULL similar to SAX but the reading of the next element is controlled by the application.
===== Week 6 - User Notifications, BroadcastReceiver and Alarms =====
==== User Notifications ====
Provide notes on this course.
==== BroadcastReceiver class ====
* BroadcastReceiver class
* Wait for events, receive them and react to them
* Broadcast receiver register for the type of events they are interested in.
* Intent are broadcasted
* onReceive() method called with received intent.
* Registration
* Static registration:
* tag with inside.
* attributes:
* android:enabled=[true|false]
* android:exported=[true|false]
* android:icon
* android:name
* android:permission
* Dynamic registration
* create IntentFilter object
* create BroadcastReceiver
* register BroadcastReceiver using registerReceiver()
* from LocalBroadcastManager
* context
* call unRegisterReceiver()
* Broadcast
* Normal or ordered.
* sticky or non-sticky.
* With or without receiver permission.
* debug details with: Intent.setFlag(FLAG_DEBUG_LOG_RESOLUTION)
* adb dumpsys to get more info on broadcast receiver.
* Processing
* Event delivery:
* onReceive():
* context
* intent
* BroadcastReceiver are only valid while in onReceive() method.
* sendOrderedBroadcast()
* IntentFilter.setPriority()
* abortBroadcast() => to stop a broadcast.
* sendStickyBroadcast()
* sendStickyOrderedBroadcast()
* apps need BROADCAST_STICKY permission to broadcast these.
* use isInitialStickyBroadcast() to check for cached sticky broadcast.
==== Alarms ====
* Alarms
* mechanism to send intent at some point(s) in the future.
* Can wake up a device.
* Alarms are cancelled in case of shutdown.
* AlarmManager
* getSystemService(ALARM_SERVICE)
* set(type, triggerAtTime, PendingIntent);
* setRepeating(type, triggerAtTime, interval, pendingIntent)
* setInexactRepeating(...)
* Alarm types
* How to interpret the time:
* Realtime : number of millisecs since 1 Jan 1970
* system up time.
* Want to do when device sleeps:
* wake the device: RTC_WAKEUP / ELAPSED_REALTIME_WAKEUP
* wait for wake up: RTC / ELAPSED_REALTIME
* PendingIntent:
* create with:
* getActivity(...)
* getBroadcast(...)
* getService(...)
===== Week 7 - Graphics, Touch and Multimedia =====
==== Graphics and animation ====
* 2D graphics
* ImageView
* Simple, less flexible
* Canvas
* Complicated, more powerfull.
* drawText(), drawPoints(), drawColor(), drawOval(), drawBitmap(), etc.
* GenericView for less frequent drawning.
* SurfaceView for frequent drawing.
* Drawing on a surface.
* Subclass must implement SurfaceHolder.Callback
* surfaceCreated()
* surfaceChanged()
* surfaceDestroyed()
* to Draw:
* SurfaceHolder.lockCanvas()
* Canvas.drawBitmap(), etc
* SurfaceHolder.unlockCanvasAndPost()
* Drawable class:
* ShapeDrawable
* PathShape
* RectShape
* OvalShape
* BitmapDrawable
* ColorDrawable
* View animation
* size, position, transparency, etc...
* TransitionDrawable
* 2-layers drawable
* AnimationDrawable
* Show each frame for some time.
* Animation
* transformation of content of a view.
* Property animation
* ValueAnimator
* Contains a TimeInterpolator
* AnimatorUpdateListener
* TypeEvaluator
* AnimatorSet
* ViewPropertyAnimator
==== Touch and Gestures ====
* MotionEvents
* Action code
* ACTION_DOWN
* ACTION_POINTER_DOWN
* ACTION_POINTER_UP
* ACTION_MOVE
* ACTION_UP
* ACTION_CANCEL
* getActionMasked()
* getActionIndex()
* getPointerId(index)
* getPointerCount()
* getX(pindex)
* getY(pindex)
* findPointerIndex(pid)
* time of event
* device
* location
* pressure
* MultiTouch:
* Pointers with an unique ID
* Touch Handling
* View.onTouchEvent()
* View.OnTouchListener
* Gestures
* GestureDetector
* GestureDetector.OnGestureListener
* GestureOverlayView
* GestureLibraries.fromRawResource(...)
==== Multimedia ====
* Audio, Images, Movies
* AudioManager, SoundPool
* getSystemService(Context.AUDIO_SERVICE)
* Load and play sound effects
* manage volume
* SoundPool can mix streams
* RingtoneManager, Ringtone
* MediaPlayer
* Playback of audio and video streams and files.
* setDataSource()
* prepare()
* start()/pause()
* seekTo()
* stop()
* release()
* VideoView
* MediaRecorder
* setAudioSource()
* setVideoSource()
* setOutputFormat()
* prepare()
* start()
* stop()
* release()
* Use camera
* need uses-permission
* need uses-feature for camera
* get camera instance
* set camera parameters
* setup preview display
* start preview
* take a picture and process image data
* release camera