{"id":16698,"date":"2016-03-14T11:33:29","date_gmt":"2016-03-14T10:33:29","guid":{"rendered":"https:\/\/www.web-dream.fr\/app\/tutoriel-android-utilisation-service-2\/"},"modified":"2019-10-05T07:28:59","modified_gmt":"2019-10-05T06:28:59","slug":"tutorial-android-using-service","status":"publish","type":"post","link":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/","title":{"rendered":"Android Tutorial : Using services."},"content":{"rendered":"<p><strong>[AdSense-A]<\/strong><\/p>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">We will learn through this Android tutorial how to use a &#8220;service&#8221; that runs in the background.<\/span><\/p>\n<p>To illustrate this concept <span class=\"\">little known<\/span> <span class=\"\">and somewhat mysterious<\/span>, we will create a small application to <span class=\"\">make a joke<\/span> <span class=\"\">to your friends.<\/span><\/p>\n<p><!--more--><\/p>\n<h2><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\">Application features<span class=\"\">.<\/span><\/span><\/h2>\n<table>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2.jpg\" rel=\"attachment wp-att-16658\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-16658 size-medium\" src=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg\" alt=\"Android tutorial\" width=\"540\" height=\"345\" srcset=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg 540w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-200x128.jpg 200w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-768x490.jpg 768w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-960x612.jpg 960w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2.jpg 1000w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><\/a><\/td>\n<td><a href=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1.jpg\" rel=\"attachment wp-att-16652\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-16652 size-medium\" src=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1-540x345.jpg\" alt=\"Android tutorial\" width=\"540\" height=\"345\" srcset=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1-540x345.jpg 540w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1-200x128.jpg 200w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1-768x490.jpg 768w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1-960x612.jpg 960w, https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android1.jpg 1000w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">The principle is simple, this application replaces <span class=\"\">the home screen<\/span> of the smartphone with an image showing the broken screen.<\/span><\/p>\n<p>At launch, the application asks you to validate the joke <span class=\"\">by pressing<\/span> the center button. <span class=\"\">Once<\/span> <span class=\"\">the action taken<\/span>, the application closes and nothing <span class=\"\">happens<\/span> until the next use of the smartphone <span class=\"\">by<\/span> <span class=\"\">your friend.<\/span> <span class=\"\">He<\/span> <span class=\"\">then discover<\/span> <span class=\"\">its<\/span> <span class=\"\">home screen with<\/span> a false image of the broken screen.<\/p>\n<p>No stress, once your friend will unlock the smartphone, <span class=\"\">the false image<\/span> disappear.<\/p>\n<h2><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">A service, <span class=\"\">what is it?<\/span><\/span><\/h2>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\"><span class=\"\">A service is<\/span> <span class=\"\">a component<\/span> <span class=\"\">that runs<\/span> <span class=\"\">in the background<\/span>. <span class=\"\">As<\/span> <span class=\"\">an activity<\/span><span class=\"\">, a service<\/span> <span class=\"\">has a life<\/span> cycle <span class=\"\">(<\/span><span class=\"\">OnCreate<\/span> <span class=\"\">()<\/span><span class=\"\">,<\/span> <span class=\"\">OnStart<\/span> <span class=\"\">(<\/span><span class=\"\">Intent<\/span> <span class=\"\">i)<\/span> <span class=\"\">or<\/span> <span class=\"\">OnStartCommand<\/span> (<span class=\"\">i<\/span> <span class=\"\">Intent<\/span>, int flags, int startId) and <span class=\"\">OnDestroy<\/span> ()). <span class=\"\">The big difference<\/span> is an activity that <span class=\"\">has no<\/span> GUI. The user therefore can not <span class=\"\">interact with it.<\/span><\/span><\/p>\n<h2><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\">Why use a service in this tutorial Android<span class=\"\">?<\/span><\/span><\/h2>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">In some cases, it is useful to create a program that runs in the background, without the application is visible, such as a music player (which works without the application open) or a timing system that performs actions at regular intervals.<\/span><\/p>\n<p>In our example, we <span class=\"\">use a service<\/span> <span class=\"\">so that the user<\/span> <span class=\"\">does not see<\/span> <span class=\"\">our application<\/span> running. <span class=\"\">The display of<\/span> <span class=\"\">the image of the<\/span> broken screen <span class=\"\">must be through<\/span> a program that has no GUI and is therefore not visible to the user. <span class=\"\">To not<\/span> <span class=\"\">our friend<\/span> <span class=\"\">would suspect<\/span> the joke<span class=\"\">, the service<\/span> will add the image when the <span class=\"\">smartphone<\/span> <span class=\"\">switches to standby<\/span>. <span class=\"\">For<\/span> this we will use the service in a &#8220;<span class=\"\">BroadcastReceiver<\/span>&#8221; will allow us to <span class=\"\">detect the<\/span> <span class=\"\">smartphone<\/span> standby and unlocking (to delete the image and destroy <span class=\"\">the service).<\/span><\/p>\n<h2><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\"><span class=\"\">Execution of the application<\/span>.<\/span><\/h2>\n<h3><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\">The visible <span class=\"\">application.<\/span><\/span><\/h3>\n<ol>\n<li><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\"><span class=\"\"><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Launching the application.<\/span><\/span><\/span><\/li>\n<li><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\"><span class=\"\"><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Press the center button.<\/span><\/span><\/span><\/li>\n<li><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\"><span class=\"\"><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Launch service.<\/span><\/span><\/span><\/li>\n<li><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\"><span class=\"\"><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Closing the application.<\/span><\/span><\/span><\/li>\n<\/ol>\n<h3>Service.<\/h3>\n<ol>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Detection standby smartphone.<\/span><\/li>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Adding the image of the broken screen.<\/span><\/li>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">When the user presses <span class=\"alt-edited\">button to turn on<\/span> the smartphone, the image of the broken screen is visible.<\/span><\/li>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Detection <span class=\"\">of the unlocking<\/span> <span class=\"\">of the smartphone<\/span> by the user.<\/span><\/li>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Remove the image, and destruction <span class=\"\">of the service.<\/span><\/span><\/li>\n<\/ol>\n<h2><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\">Creating the application<span class=\"\">.<\/span><\/span><\/h2>\n<div dir=\"ltr\">\u00a0<span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Note: To follow this tutorial, we consider that you know to create a new Android app with Android <span class=\"\">Studio.<\/span><\/span><\/div>\n<ol>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">Create a new application with Android Studio by choosing &#8220;Blank Activity&#8221;.<\/span><\/li>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\"><span class=\"\">Name the<\/span> <span class=\"\">application (<\/span><span class=\"\">&#8220;<\/span><span class=\"\">MyJokeApplication<\/span>&#8220;) in our case.<\/span><\/li>\n<li><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\"><span class=\"\">Once the project<\/span> <span class=\"\">created by<\/span> <span class=\"\">Android<\/span> <span class=\"\">Studio<\/span><span class=\"\">, open the<\/span> MainActivity.java file and add the following code:<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>import android.content.Intent;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.widget.Button;\r\n\r\npublic class MainActivity extends AppCompatActivity {\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n\r\n        Button button_close_app_and_go_joke = (Button) findViewById(R.id.button_close_app_and_go_joke);\r\n        button_close_app_and_go_joke.setOnClickListener(new View.OnClickListener() {\r\n            public void onClick(View v) {\r\n\r\n                Intent service = new Intent(getApplicationContext(), JokeService.class);\r\n                startService(service); \/\/ Lancement du service\r\n                finish(); \/\/ Fermeture de l'application\r\n\r\n            }\r\n        });\r\n    }\r\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div id=\"gt-src-tools\"><\/div>\n<div id=\"gt-input-tool\" dir=\"ltr\">\n<p>\u00a0<span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\"><span class=\"alt-edited\">The main activity<\/span> <span class=\"\">is very simple.<\/span> After loading the GUI (R.layout.activity_main), we assign a &#8220;listener&#8221; <span class=\"\">to the middle button<\/span> to detect the click by the user.<\/span><\/p>\n<p><span class=\"\">When clicking<\/span> <span class=\"\">on the button<\/span><span class=\"\">, the application<\/span> starts the service (an Intent and startService) <span class=\"\">and closes automatically<\/span> <span class=\"\">(<\/span><span class=\"\">finish ()<\/span>). So there is more that the service &#8220;runs&#8221; <span class=\"\">in the background<\/span><span class=\"\">.<\/span><\/p>\n<p>The activity_main.xml <span class=\"\">graphic file<\/span> is also very simple:<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n    tools:context=\"fr.webdream.myjokeapplication.MainActivity\"&gt;\r\n\r\n    &lt;Button\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:text=\"@string\/fermerapplication\"\r\n        android:id=\"@+id\/button_close_app_and_go_joke\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:layout_centerHorizontal=\"true\" \/&gt;\r\n&lt;\/RelativeLayout&gt;<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">To work, the service must be initially declared in the manifest <span class=\"\">file of the application<\/span><span class=\"\">.<\/span><\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    package=\"fr.webdream.myjokeapplication\"&gt;\r\n\r\n    &lt;uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" \/&gt;\r\n    &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;\r\n\r\n    &lt;application\r\n        android:allowBackup=\"true\"\r\n        android:icon=\"@mipmap\/ic_launcher\"\r\n        android:label=\"@string\/app_name\"\r\n        android:supportsRtl=\"true\"\r\n        android:theme=\"@style\/AppTheme\"&gt;\r\n\r\n        &lt;activity android:name=\".MainActivity\"&gt;\r\n            &lt;intent-filter&gt;\r\n                &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\r\n\r\n                &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\r\n            &lt;\/intent-filter&gt;\r\n        &lt;\/activity&gt;\r\n\r\n        <span style=\"color: #339966;\">&lt;service<\/span>\r\n<span style=\"color: #339966;\">            android:name=\".JokeService\"<\/span>\r\n<span style=\"color: #339966;\">            android:enabled=\"true\"<\/span>\r\n<span style=\"color: #339966;\">            android:exported=\"true\"&gt;&lt;\/service&gt;<\/span>\r\n\r\n    &lt;\/application&gt;\r\n\r\n&lt;\/manifest&gt;<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">After starting the <span class=\"\">service, and<\/span> <span class=\"\">to detect<\/span> <span class=\"\">the sleep<\/span> <span class=\"alt-edited\">and unlocking of the<\/span> smartphone we will initialize the &#8220;<span class=\"\">BroadcastReceiver<\/span>&#8221; in the &#8220;onStartCommand&#8221; service.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>public int onStartCommand (Intent intent, int flags, int startId){\r\n      try {\r\n        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);\r\n        filter.addAction(Intent.ACTION_SCREEN_OFF); \/\/d\u00e9tection de la mise en veille du smartphone\r\n        filter.addAction(Intent.ACTION_USER_PRESENT); \/\/d\u00e9tection du d\u00e9verrouillage du smartphone\r\n        BroadcastReceiver mReceiver = new receiverScreen();\r\n        registerReceiver(mReceiver, filter);\r\n    } catch (Exception e) {\r\n\r\n    }\r\n    return START_STICKY;\r\n}\r\n\r\npublic class receiverScreen extends BroadcastReceiver {\r\n\r\n    @Override\r\n    public void onReceive(Context context, Intent intent) {\r\n\r\n        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){\r\n            Show_joke(); \/\/Affichage de l'image de l'\u00e9cran cass\u00e9\r\n        }\r\n        if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)){\r\n            hide_broken_screen_and_destroy_service(); \/\/On supprime l'image et on d\u00e9truit le service.\r\n        }\r\n    }\r\n\r\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">To view \/ delete the image we use the &#8220;WindowManager<span class=\"\">&#8221; which<\/span> adds a view to the smartphone <span class=\"\">screen.<\/span><\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>private void Show_joke(){\r\n\r\n    if (showing){return;} \/\/Si l'image est d\u00e9j\u00e0 affich\u00e9e, on sort.\r\n\r\n    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);\r\n    \r\n    broken_screen_View = new ImageView(this); \/\/Cr\u00e9ation de l'image de l'\u00e9cran cass\u00e9\r\n    Bitmap bmp_broken_screen;\r\n    if(getResources().getDisplayMetrics().widthPixels&gt;getResources().getDisplayMetrics().heightPixels) \/\/On choisi l'image en fonction du mode portrait ou en paysage\r\n    {\r\n        bmp_broken_screen = BitmapFactory.decodeResource(getResources(), R.drawable.broken_screen_land);\r\n    }\r\n    else\r\n    {\r\n        bmp_broken_screen = BitmapFactory.decodeResource(getResources(), R.drawable.broken_screen);\r\n    }\r\n    broken_screen_View.setImageBitmap(bmp_broken_screen);\r\n    broken_screen_View.setScaleType(ImageView.ScaleType.FIT_XY);\r\n\r\n    \/\/D\u00e9finition des param\u00e8tres a appliquer \u00e0 l'image\r\n    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);\r\n\r\n    \/\/Affichage de l'image\r\n    windowManager.addView(broken_screen_View, params);\r\n    showing=true;\r\n}\r\n\r\nprivate void hide_broken_screen_and_destroy_service(){\r\n    windowManager.removeViewImmediate(broken_screen_View);\r\n    showing=false;\r\n    stopSelf();\r\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"result_box\" class=\"short_text\" lang=\"en\" tabindex=\"-1\">This gives us the following <span class=\"alt-edited\">complete service<\/span><span class=\"\">:<\/span><\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<pre>package fr.webdream.myjokeapplication;\r\n\r\nimport android.app.Service;\r\nimport android.content.BroadcastReceiver;\r\nimport android.content.Context;\r\nimport android.content.Intent;\r\nimport android.content.IntentFilter;\r\nimport android.graphics.Bitmap;\r\nimport android.graphics.BitmapFactory;\r\nimport android.os.IBinder;\r\nimport android.graphics.PixelFormat;\r\nimport android.util.Log;\r\nimport android.view.WindowManager;\r\nimport android.widget.ImageView;\r\n\r\npublic class JokeService extends Service {\r\n\r\n    private WindowManager windowManager;\r\n    private ImageView broken_screen_View;\r\n    private Boolean showing;\r\n\r\n    public JokeService() {\r\n    }\r\n\r\n    @Override\r\n    public IBinder onBind(Intent intent) {\r\n        \/\/ TODO: Return the communication channel to the service.\r\n        return null;\r\n    }\r\n\r\n    public int onStartCommand (Intent intent, int flags, int startId){\r\n\r\n          try {\r\n            IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);\r\n\r\n            filter.addAction(Intent.ACTION_SCREEN_OFF);\r\n            filter.addAction(Intent.ACTION_USER_PRESENT);\r\n\r\n            BroadcastReceiver mReceiver = new receiverScreen();\r\n\r\n            registerReceiver(mReceiver, filter);\r\n        } catch (Exception e) {\r\n\r\n        }\r\n\r\n        return START_STICKY;\r\n    }\r\n\r\n    @Override\r\n    public void onCreate() {\r\n        super.onCreate();\r\n        showing=false;\r\n    }\r\n\r\n    @Override\r\n    public void onDestroy(){\r\n        Log.v(\"SERVICE\", \"Service killed\");\r\n        if (showing){\r\n            windowManager.removeViewImmediate(broken_screen_View);\r\n            showing=false;\r\n        }\r\n        super.onDestroy();\r\n    }\r\n\r\n    private void Show_joke(){\r\n\r\n        if (showing){return;} \/\/Si l'image est d\u00e9j\u00e0 affich\u00e9e, on sort.\r\n\r\n        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);\r\n\r\n        broken_screen_View = new ImageView(this); \/\/Cr\u00e9ation de l'image de l'\u00e9cran cass\u00e9\r\n        Bitmap bmp_broken_screen;\r\n        if(getResources().getDisplayMetrics().widthPixels&gt;getResources().getDisplayMetrics().heightPixels) \/\/On choisi l'image en fonction du mode portrait ou en paysage\r\n        {\r\n            bmp_broken_screen = BitmapFactory.decodeResource(getResources(), R.drawable.broken_screen_land);\r\n        }\r\n        else\r\n        {\r\n            bmp_broken_screen = BitmapFactory.decodeResource(getResources(), R.drawable.broken_screen);\r\n        }\r\n        broken_screen_View.setImageBitmap(bmp_broken_screen);\r\n        broken_screen_View.setScaleType(ImageView.ScaleType.FIT_XY);\r\n\r\n        \/\/D\u00e9finition des param\u00e8tres a appliquer \u00e0 l'image\r\n        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);\r\n\r\n        \/\/Affichage de l'image\r\n        windowManager.addView(broken_screen_View, params);\r\n        showing=true;\r\n    }\r\n\r\n    private void hide_broken_screen_and_destroy_service(){\r\n        windowManager.removeViewImmediate(broken_screen_View);\r\n        showing=false;\r\n        stopSelf();\r\n    }\r\n\r\n    public class receiverScreen extends BroadcastReceiver {\r\n\r\n        @Override\r\n        public void onReceive(Context context, Intent intent) {\r\n\r\n            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){\r\n                Show_joke(); \/\/Affichage de l'image de l'\u00e9cran cass\u00e9\r\n            }\r\n            if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)){\r\n                hide_broken_screen_and_destroy_service(); \/\/On supprime l'image et on d\u00e9truit le service.\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"result_box\" class=\"\" lang=\"en\" tabindex=\"-1\">In conclusion, the use of service in an Android application is simple and can be very useful in applications or background tasks actions must be performed.<\/span><\/p>\n<p>If <span class=\"\">you wish to reproduce<\/span> this app you <span class=\"\">will find<\/span> two <span class=\"\">image files (<\/span>portrait and landscape) used:<\/p>\n<p><span style=\"text-decoration: underline;\"><a href=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/broken_screen.png\" target=\"_blank\" rel=\"noopener noreferrer\">Image portrait<\/a><\/span><\/p>\n<p><span style=\"text-decoration: underline;\"><a href=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/broken_screen_land.png\" target=\"_blank\" rel=\"noopener noreferrer\">Image landscape<\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[AdSense-A] We will learn through this Android tutorial how to use a &#8220;service&#8221; that runs in the background. To illustrate this concept little known and somewhat mysterious, we will create a small application to make a joke to your friends.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[198,205],"tags":[206,207,208,209],"class_list":["post-16698","post","type-post","status-publish","format-standard","hentry","category-tutorial","category-tutoriel-android-en","tag-android-en","tag-service-en","tag-tuto-en","tag-tutoriel-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Android Tutorial : Using services. - WEB DREAM<\/title>\n<meta name=\"description\" content=\"Android tutorial for using services in an application. Example through a simple application.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android Tutorial : Using services. - WEB DREAM\" \/>\n<meta property=\"og:description\" content=\"Android tutorial for using services in an application. Example through a simple application.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\" \/>\n<meta property=\"og:site_name\" content=\"WEB DREAM\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pages\/Web-Dream\/687618201332547\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-14T10:33:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-05T06:28:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg\" \/>\n<meta name=\"author\" content=\"michel\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"michel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\"},\"author\":{\"name\":\"michel\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/#\/schema\/person\/5fdddc6970607988081c620db9306dee\"},\"headline\":\"Android Tutorial : Using services.\",\"datePublished\":\"2016-03-14T10:33:29+00:00\",\"dateModified\":\"2019-10-05T06:28:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\"},\"wordCount\":627,\"publisher\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg\",\"keywords\":[\"android\",\"service\",\"tuto\",\"tutoriel\"],\"articleSection\":[\"Tutorial\",\"Tutoriel Android\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\",\"url\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\",\"name\":\"Android Tutorial : Using services. - WEB DREAM\",\"isPartOf\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg\",\"datePublished\":\"2016-03-14T10:33:29+00:00\",\"dateModified\":\"2019-10-05T06:28:59+00:00\",\"description\":\"Android tutorial for using services in an application. Example through a simple application.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage\",\"url\":\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg\",\"contentUrl\":\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.web-dream.fr\/app\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android Tutorial : Using services.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/#website\",\"url\":\"https:\/\/www.web-dream.fr\/app\/\",\"name\":\"WEB DREAM\",\"description\":\"Cr\u00e9ateur d&#039;application Iphone \/ Ipad et Android\",\"publisher\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.web-dream.fr\/app\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/#organization\",\"name\":\"Web Dream\",\"url\":\"https:\/\/www.web-dream.fr\/app\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Logo-Web-dream_500.jpg\",\"contentUrl\":\"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Logo-Web-dream_500.jpg\",\"width\":500,\"height\":237,\"caption\":\"Web Dream\"},\"image\":{\"@id\":\"https:\/\/www.web-dream.fr\/app\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/pages\/Web-Dream\/687618201332547\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/#\/schema\/person\/5fdddc6970607988081c620db9306dee\",\"name\":\"michel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.web-dream.fr\/app\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2c320e000f550670cb52e59ac2af654b1352deef6e0c4165566b8fe66d4bd8a9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2c320e000f550670cb52e59ac2af654b1352deef6e0c4165566b8fe66d4bd8a9?s=96&d=mm&r=g\",\"caption\":\"michel\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Android Tutorial : Using services. - WEB DREAM","description":"Android tutorial for using services in an application. Example through a simple application.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/","og_locale":"en_US","og_type":"article","og_title":"Android Tutorial : Using services. - WEB DREAM","og_description":"Android tutorial for using services in an application. Example through a simple application.","og_url":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/","og_site_name":"WEB DREAM","article_publisher":"https:\/\/www.facebook.com\/pages\/Web-Dream\/687618201332547","article_published_time":"2016-03-14T10:33:29+00:00","article_modified_time":"2019-10-05T06:28:59+00:00","og_image":[{"url":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg","type":"","width":"","height":""}],"author":"michel","twitter_misc":{"Written by":"michel","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#article","isPartOf":{"@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/"},"author":{"name":"michel","@id":"https:\/\/www.web-dream.fr\/app\/#\/schema\/person\/5fdddc6970607988081c620db9306dee"},"headline":"Android Tutorial : Using services.","datePublished":"2016-03-14T10:33:29+00:00","dateModified":"2019-10-05T06:28:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/"},"wordCount":627,"publisher":{"@id":"https:\/\/www.web-dream.fr\/app\/#organization"},"image":{"@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg","keywords":["android","service","tuto","tutoriel"],"articleSection":["Tutorial","Tutoriel Android"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/","url":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/","name":"Android Tutorial : Using services. - WEB DREAM","isPartOf":{"@id":"https:\/\/www.web-dream.fr\/app\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage"},"image":{"@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage"},"thumbnailUrl":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg","datePublished":"2016-03-14T10:33:29+00:00","dateModified":"2019-10-05T06:28:59+00:00","description":"Android tutorial for using services in an application. Example through a simple application.","breadcrumb":{"@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#primaryimage","url":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg","contentUrl":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Tuto_android2-540x345.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.web-dream.fr\/app\/en\/tutorial-android-using-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.web-dream.fr\/app\/en\/"},{"@type":"ListItem","position":2,"name":"Android Tutorial : Using services."}]},{"@type":"WebSite","@id":"https:\/\/www.web-dream.fr\/app\/#website","url":"https:\/\/www.web-dream.fr\/app\/","name":"WEB DREAM","description":"Cr\u00e9ateur d&#039;application Iphone \/ Ipad et Android","publisher":{"@id":"https:\/\/www.web-dream.fr\/app\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.web-dream.fr\/app\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.web-dream.fr\/app\/#organization","name":"Web Dream","url":"https:\/\/www.web-dream.fr\/app\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.web-dream.fr\/app\/#\/schema\/logo\/image\/","url":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Logo-Web-dream_500.jpg","contentUrl":"https:\/\/www.web-dream.fr\/app\/wp-content\/uploads\/2016\/03\/Logo-Web-dream_500.jpg","width":500,"height":237,"caption":"Web Dream"},"image":{"@id":"https:\/\/www.web-dream.fr\/app\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/pages\/Web-Dream\/687618201332547"]},{"@type":"Person","@id":"https:\/\/www.web-dream.fr\/app\/#\/schema\/person\/5fdddc6970607988081c620db9306dee","name":"michel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.web-dream.fr\/app\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2c320e000f550670cb52e59ac2af654b1352deef6e0c4165566b8fe66d4bd8a9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2c320e000f550670cb52e59ac2af654b1352deef6e0c4165566b8fe66d4bd8a9?s=96&d=mm&r=g","caption":"michel"}}]}},"_links":{"self":[{"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/posts\/16698","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/comments?post=16698"}],"version-history":[{"count":7,"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/posts\/16698\/revisions"}],"predecessor-version":[{"id":18109,"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/posts\/16698\/revisions\/18109"}],"wp:attachment":[{"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/media?parent=16698"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/categories?post=16698"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.web-dream.fr\/app\/en\/wp-json\/wp\/v2\/tags?post=16698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}