====== 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