วันอังคารที่ 22 ตุลาคม พ.ศ. 2556

Background Service Example

Background Service Example

Service เป็นโปรแกรมส่วนที่สามารถทำงานแบบระยะนาน แบบทำงานอยู่เบื้องหลังและไม่มีส่วนติดต่อผู้ใช้งาน แม้ว่าผู้ใช้จะสลับไปยังโปรแกรมประยุกต์อื่นๆ โปรแกรมอื่นๆ สามารถทำงานได้ตามปกติ  Service ยังสามารถที่จะ รับส่งข้อมูลเพื่อ ที่จะติดต่อกันกับ Service ( Bind Service ) และสื่อสารแบบ IPC ได้ด้วย ตัวอย่างเช่น Service อาจจะเชื่อมต่อเครือข่าย(Network ) ,เล่นเพลง ( Media Player ) ,ติดต่อ Input/Output หรือติดต่อ กับ database โดยทำงานอยู่เบื้องหลัง

Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application component can start a service and it will continue to run in the background even if the user switches to another application. Additionally, a component can bind to a service to interact with it and even perform interprocess communication (IPC). For example, a service might handle network transactions, play music, perform file I/O, or interact with a content provider, all from the background.
A service can essentially take two forms:
Started
A service is "started" when an application component (such as an activity) starts it by calling startService(). Once started, a service can run in the background indefinitely, even if the component that started it is destroyed. Usually, a started service performs a single operation and does not return a result to the caller. For example, it might download or upload a file over the network. When the operation is done, the service should stop itself.
Bound
A service is "bound" when an application component binds to it by calling bindService(). A bound service offers a client-server interface that allows components to interact with the service, send requests, get results, and even do so across processes with interprocess communication (IPC). A bound service runs only as long as another application component is bound to it. Multiple components can bind to the service at once, but when all of them unbind, the service is destroyed.
Although this documentation generally discusses these two types of services separately, your service can work both ways—it can be started (to run indefinitely) and also allow binding. It's simply a matter of whether you implement a couple callback methods:onStartCommand() to allow components to start it and onBind()to allow binding.
Regardless of whether your application is started, bound, or both, any application component can use the service (even from a separate application), in the same way that any component can use an activity—by starting it with an Intent. However, you can declare the service as private, in the manifest file, and block access from other applications. This is discussed more in the section about Declaring the service in the manifest.


Background Service Example Code
This code call startService  then play sound in MediaPlayer in Service.
Click Notification to Stop Service.

MainActivity.java Code

package code.example.service;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
     
      Button btnService,btnStop;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
           
            btnService = (Button)findViewById(R.id.buttonStart);
            btnStop = (Button)findViewById(R.id.buttonStop);
           
            btnService.setOnClickListener(new View.OnClickListener() {

                  @Override
                  public void onClick(View arg0) {
                        // Make sure the service is started.  It will continue running
                // until someone calls stopService().  The Intent we use to find
                // the service explicitly specifies our service component, because
                // we want it running in our own process and don't want other
                // applications to replace it.
                        startService(new Intent(MainActivity.this, HelloService.class));
                        finish();                    
                  }                
            });
           
            btnStop.setOnClickListener(new View.OnClickListener() {

                  @Override
                  public void onClick(View arg0) {
                       
                        // Cancel a previous call to startService().  Note that the
                // service will not actually stop at this point if there are
                // still bound clients.
                stopService(new Intent(MainActivity.this, HelloService.class));                
                  }                
            });
      }

      @Override
      public Boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
      }

}


HelloService,java Code
package code.example.service;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;


public class HelloService extends Service {
                 
      NotificationManager nm;
      MediaPlayer mMediaPlayer;
     
           
      //@Override
      public void onCreate() {
            super.onCreate();
           
            Thread loop = new Thread(new Runnable() {
                 
                  @Override
                  public void run() {
                       
                        while (true){                            
                       
                              if(mMediaPlayer != null){
                                    mMediaPlayer.release();
                              }
                              mMediaPlayer = MediaPlayer.create(HelloService.this, R.raw.sound_ping);
                          mMediaPlayer.start();
                         
                          try {
                                    Thread.sleep(1500);
                              } catch (InterruptedException e) {                         
                                    e.printStackTrace();
                              }
                        }//while
                  }
            });
            loop.start();
           
      }
     

      @SuppressWarnings("deprecation")
      @Override
      public void onStart(Intent intent, int startId) {
            super.onStart(intent, startId);
           
            nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
           
            // User clicked the notification. Need to stop the service.
            if (intent != null && intent.getAction() != null
                        && intent.getAction().equals("stop")) {              
                  nm.cancel(0);
                  stopSelf();
                  System.exit(0);
            } else {
                 
                  // Service starting. Create a notification.
                  Notification notification = new Notification(
                              R.drawable.ic_launcher, "Service running",System.currentTimeMillis());
                 
                  notification.setLatestEventInfo(this, "Service Running", "Click to Stop",
                                          PendingIntent.getService(this, 0, new Intent(
                                                      "stop", null, this, this.getClass()), 0));
                  notification.flags |= Notification.FLAG_ONGOING_EVENT;
                  nm.notify(0, notification);

            }
                 
      }//onStart


      @Override
      public IBinder onBind(Intent intent) {
            return null;
      }
     
     
//    public class LocalBinder extends Binder {
//          HelloService getService() {
//                return HelloService.this;
//          }
//    }
//   
//    @Override
//    public IBinder onBind(Intent arg0) {
//          return mBinder;
//    }
//   
//    // This is the object that receives interactions from clients.  See
//    // RemoteService for a more complete example.
//    private final IBinder mBinder = new LocalBinder();
     

}

AndroidManifest.xml Code
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="code.example.service"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />

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

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

</manifest>




Download Background Service Example Code



สอนเขียน Android  สอนเขียนโปรแกรม Android แบบ Online

รับสอนเขียนโปรแกรม Android App สอนแบบ online สอนสด ตัวต่อตัว หรือ เป็นกลุ่ม ได้ทั่วประเทศ กำหนดเวลาเรียนได้
การเรียน Android App แบบ online สามารถกำหนดเวลาเรียน เองได้ ตามแต่ตกลงกัน
( รับสอน นอกสถานที่ แบบเป็น กลุ่ม ทั่วประเทศ )

แต่ละ Course ขึ้นอยู่กับพื้นฐานที่มี นะครับ

Course
1.JAVA Programming สำหรับผู้ที่ยังไม่มีพื้นฐานทางด้าน การเขียนโปรแกรม JAVA
เรียน 3-4 ครั้ง ครั้งละ 2 ชั่วโมง  

2.Beginning Android Development เริ่มต้นการพัฒนาด้วย Android ( ต้องมีพื้นฐาน JAVA แล้ว )
เรียน 5-6 ครั้ง ครั้งละ 2 ชั่วโมง 
เรียนจบคอร์สนี้ ก็สามารถทำ Application ได้แล้ว

3.Android Application สอนตามความต้องการในการเขียนโปรแกรม ใช้งานจริง เช่น โปรแกรมใช้งานด้านต่างๆ
ระยะเวลา และ ค่าเรียน ตามแต่ความยากง่ายของโปรแกรม ซึ่งอาจจะรวมสอน JAVA Programming ด้วยสำหรับผู้เริ่มต้นเลย
ดังนั้น ราคาสอน จะขึ้นอยู่กับ สเปคงาน

โปรแกรมที่ใช้ทำการเรียน Team Viewer  Version ล่าสุด Version 8
Meeting ID จะแจ้งให้ก่อนเรียน ผ่านทาง email sms Line หรือ อื่นๆ ตามสะดวก
ใช้ Tab Meeting ใส่ Meeting ID และใส่ชื่อ
แล้ว Join Meeting

ติดต่อ amphancm@gmail.com