Ir al contenido principal

Android - Basic Steps (Notifications)

User Notifications

Types:

  • Toast
  • Notification Area Notifications

Tip

To use the notification vibration, establish the permission in the AndroidManifest.xml file

   <uses-permission android:name="android.permission.VIBRATE" >
    </uses-permission>


Broadcast

  • Base class for components that receive and react to events
  • When event occur is represented as Intent, then are broadcast to system
    • The Intent routes to BroadcastReceiver
    • The BroadcastReceiver receive on the method onReceive()

Broadcast

  • Events can be broadcast in Order or Normal way
    • Normal - Undefined order and if there are two or more BroadcastReceivers can process the event at the same time.
    • Order - Deliver the intent one at the time in priority order
  • Can also be Sticky or Not Sticky
    • Sticky  
      • Store intent after initial broadcast
      • Is useful to record system changes like the battery status
      • Is disposed after the event finish 
    • Non Sticky
      • Discard intent after initial broadcast
      • Is useful to record that an event has occurred
    • The broadcaster must have the permission BROADCAST_STICKY

Broadcast Order

To send the Intent in an order can use the method sendOrderedBroadcast()
  • With two parameters send in priority order (Intent intent, String receivingpermission)
  • With more parameters have better control

BroadcastReceiver

  • The broadcastReceiver can register in
    • AndroidManifest (Statically)
      • Atributes  - android:exported - if can receive from other applications
      • It is registered when system boot or when package are added at runtime.
      • The mehods to register at runtime are:
        • Context.registerReceiver()
        • LocalBroadcastManager.registerReceiver()
    • Using the method registerRecewiver()  (Dinamically)
        <receiver
            android:name=".Receiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="course.examples.BroadcastReceiver.show_toast" >
                </action>
            </intent-filter>
        </receiver>



  • BroadcastReceiver 
    • Receive on the method onReceive() with the context and intent as parameter
    • broadcast an intent is a relative expensive 
    • broadcast runs in the main thread 
    • Receiver is not consider valid once onReceive() returns
    • Broadcast receivers can't start asynchronous operations 
  • When the method sendOrderedBroadcast is invoke, it can collect information from others broadcastReceiver with the method getResultData()
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,
"Final Result is " + getResultData(),
Toast.LENGTH_LONG).show();
}
}, null, 0, null, null);
  • In each broadcastReceiver can put data with the method 
setResultData(info_to_be_collected);

Debug

  • Get more information in the Log using in the Intent to be broadcast
    • Intent.setFlag(FLAG_DEBUG_LOG_RESOLUTION)
  • Use ADB tool 
    • To see which receivers are registed
  • Use dumpsys command
    • %adb shell dumpsys activity b
      • show broadcast receivers that are dynamically registered
    • %adb shell dumpsys package
      • show broadcast receivers that are statically registered




Comentarios

Entradas populares de este blog

C# Using tabs

To use tabs in C# use the TabContainer element from AjaxControlToolkit Include AjaxControlToolkit  Include in the Web.config file, inside the tag <system.web> the following code  <pages>       <controls>         <add tagPrefix="ajaxCTK" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"/>       </controls>     </pages>   Include TabContainer element First  include TabContainer element that is the section where all the tabs will be displayed. <ajaxCTK:TabContainer ID="TabContainerUpdate" runat="server"                 Height="800"                 CssClass="ajax__tab_style"> </ajaxCTK:TabContainer> Second per each tab include the following code corresponding to each ...

Rails - Basic Steps III

pValidations Validations are a type of ActiveRecord Validations are defined in our models Implement Validations Go to   root_app/app/models Open files  *.rb for each model Mandatory field validates_presence_of   :field Ex:   validates_presence_of    :title Classes The basic syntax is class MyClass        @global_variable                def my_method              @method_variable        end end Create an instance myInstance = MyClass.new Invoke a mehod mc.my_method class() method returns the type of the object In Ruby, last character of method define the behavior If ends with a question -> return a boolean value If ends with an exclamation -> change the state of the object Getter / Setter method def global_variable       return @global_variable end ...

Python create package

Create a root folder Create a sub-folder "example_pkg" that contains the funtionallity packaging_tutorial/ example_pkg/ __init__.py In the root folder create the following structure  packaging_tutorial/ example_pkg/ __init__.py tests/ setup.py LICENSE README.md in the setup.py contains the configuration of the packages your package is found by find_packages() import setuptools with open ( "README.md" , "r" ) as fh : long_description = fh . read () setuptools . setup ( name = "example-pkg-YOUR-USERNAME-HERE" , # Replace with your own username version = "0.0.1" , author = "Example Author" , author_email = "author@example.com" , description = "A small example package" , long_description = long_description , long_description_content_type = "text/markdown" , url = "https://github.com/pypa/sam...