Android example of using Service and BroadcastReceiver

Android example of using Service and BroadcastReceiver - Hello Friend GENERAL INFO FOR ANDROID DEVELOPMENT, In the article you read this time with the title Android example of using Service and BroadcastReceiver, We have prepared this article for you to read and retrieve information there in. Hopefully the contents of postings Artikel Android code sample: Service and IntentService, Artikel BroadcastReceiver, We write this you can understand. Alright, good read.

The Title : Android example of using Service and BroadcastReceiver
link : Android example of using Service and BroadcastReceiver

Read also


Android example of using Service and BroadcastReceiver


This example show how to using Service to run long-time task in background thread, and also implement BroadcastReceiver to make communication between Activity and Service.


Reference: Android Developers Guide - Services

If a component starts the service by calling startService() (which results in a call to onStartCommand()), then the service remains running until it stops itself with stopSelf() or another component stops it by calling stopService().

If a component calls bindService() to create the service (and onStartCommand() is not called), then the service runs only as long as the component is bound to it. Once the service is unbound from all clients, the system destroys it.

The Android system will force-stop a service only when memory is low and it must recover system resources for the activity that has user focus. If the service is bound to an activity that has user focus, then it's less likely to be killed, and if the service is declared to run in the foreground (discussed later), then it will almost never be killed. Otherwise, if the service was started and is long-running, then the system will lower its position in the list of background tasks over time and the service will become highly susceptible to killing—if your service is started, then you must design it to gracefully handle restarts by the system. If the system kills your service, it restarts it as soon as resources become available again (though this also depends on the value you return from onStartCommand(), as discussed later). For more information about when the system might destroy a service, see the Processes and Threading document.



layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:orientation="vertical"
tools:context="com.blogspot.android_er.androidservice.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="web"
android:text="http://android-er.blogspot.com/"
android:textStyle="bold" />

<Button
android:id="@+id/startservice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Service"/>
<Button
android:id="@+id/stopservice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Stop Service"/>
<EditText
android:id="@+id/msgtosend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="msg to send..." />
<Button
android:id="@+id/send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send msg to service"/>
<TextView
android:id="@+id/cntreceived"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="26dp"/>
<TextView
android:id="@+id/msgreceived"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textStyle="bold"
android:textSize="20dp"/>

</LinearLayout>


MainActivity.java
package com.blogspot.android_er.androidservice;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

Button btnStart, btnStop, btnSend;
EditText editTextMsgToSend;
TextView textViewCntReceived, textViewMsgReceived;

MyMainReceiver myMainReceiver;
Intent myIntent = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button)findViewById(R.id.startservice);
btnStop = (Button)findViewById(R.id.stopservice);
btnSend = (Button)findViewById(R.id.send);
editTextMsgToSend = (EditText)findViewById(R.id.msgtosend);
textViewCntReceived = (TextView)findViewById(R.id.cntreceived);
textViewMsgReceived = (TextView)findViewById(R.id.msgreceived);

btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService();
}
});

btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService();
}
});

btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msgToService = editTextMsgToSend.getText().toString();

Intent intent = new Intent();
intent.setAction(MyService.ACTION_MSG_TO_SERVICE);
intent.putExtra(MyService.KEY_MSG_TO_SERVICE, msgToService);
sendBroadcast(intent);
}
});
}

private void startService(){
myIntent = new Intent(MainActivity.this, MyService.class);
startService(myIntent);
}

private void stopService(){
if(myIntent != null){
stopService(myIntent);
}
myIntent = null;
}

@Override
protected void onStart() {
myMainReceiver = new MyMainReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyService.ACTION_UPDATE_CNT);
intentFilter.addAction(MyService.ACTION_UPDATE_MSG);
registerReceiver(myMainReceiver, intentFilter);
super.onStart();
}

@Override
protected void onStop() {
unregisterReceiver(myMainReceiver);
super.onStop();
}

@Override
protected void onDestroy() {
super.onDestroy();
stopService();
}

private class MyMainReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(MyService.ACTION_UPDATE_CNT)){
int int_from_service = intent.getIntExtra(MyService.KEY_INT_FROM_SERVICE, 0);
textViewCntReceived.setText(String.valueOf(int_from_service));
}else if(action.equals(MyService.ACTION_UPDATE_MSG)){
String string_from_service = intent.getStringExtra(MyService.KEY_STRING_FROM_SERVICE);
textViewMsgReceived.setText(String.valueOf(string_from_service));
}
}
}
}


MyService.java
package com.blogspot.android_er.androidservice;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;

public class MyService extends Service {

//from MyService to MainActivity
final static String KEY_INT_FROM_SERVICE = "KEY_INT_FROM_SERVICE";
final static String KEY_STRING_FROM_SERVICE = "KEY_STRING_FROM_SERVICE";
final static String ACTION_UPDATE_CNT = "UPDATE_CNT";
final static String ACTION_UPDATE_MSG = "UPDATE_MSG";

//from MainActivity to MyService
final static String KEY_MSG_TO_SERVICE = "KEY_MSG_TO_SERVICE";
final static String ACTION_MSG_TO_SERVICE = "MSG_TO_SERVICE";

MyServiceReceiver myServiceReceiver;
MyServiceThread myServiceThread;
int cnt;

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
Toast.makeText(getApplicationContext(),
"onCreate", Toast.LENGTH_LONG).show();
myServiceReceiver = new MyServiceReceiver();
super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(),
"onStartCommand", Toast.LENGTH_LONG).show();

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_MSG_TO_SERVICE);
registerReceiver(myServiceReceiver, intentFilter);

myServiceThread = new MyServiceThread();
myServiceThread.start();

return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
Toast.makeText(getApplicationContext(),
"onDestroy", Toast.LENGTH_LONG).show();
myServiceThread.setRunning(false);
unregisterReceiver(myServiceReceiver);
super.onDestroy();
}

public class MyServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

String action = intent.getAction();
if(action.equals(ACTION_MSG_TO_SERVICE)){
String msg = intent.getStringExtra(KEY_MSG_TO_SERVICE);

msg = new StringBuilder(msg).reverse().toString();

//send back to MainActivity
Intent i = new Intent();
i.setAction(ACTION_UPDATE_MSG);
i.putExtra(KEY_STRING_FROM_SERVICE, msg);
sendBroadcast(i);
}
}
}

private class MyServiceThread extends Thread{

private boolean running;

public void setRunning(boolean running){
this.running = running;
}

@Override
public void run() {
cnt = 0;
running = true;
while (running){
try {
Thread.sleep(1000);

Intent intent = new Intent();
intent.setAction(ACTION_UPDATE_CNT);
intent.putExtra(KEY_INT_FROM_SERVICE, cnt);
sendBroadcast(intent);

cnt++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}


Modify AndroidManifest.xml to add <service> of ".MyService".
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blogspot.android_er.androidservice">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyService"/>
</application>

</manifest>


download filesDownload the files .

Next:
Example of IntentService and BroadcastReceiver

Related:
Android example of using Thread and Handler



Thus Article Android example of using Service and BroadcastReceiver

The End Article Android example of using Service and BroadcastReceiver This time, hopefully can give benefits to all of you. well, see you in posting other articles.

You are now reading the article Android example of using Service and BroadcastReceiver with the link address http://xorislogo.blogspot.com/2016/05/android-example-of-using-service-and.html

0 Response to "Android example of using Service and BroadcastReceiver"

Post a Comment