рдкрд░рд┐рдЪрдп
рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдореИрдВ рдПрдХ рдЖрд╡реЗрджрди рдФрд░ Android рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХреА рдмрд╛рддрдЪреАрдд (рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдкреНрд░рдХрд╛рд╢рди рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдпрд╣ рдмрддрд╛рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА, рдПрдкреНрд▓рд┐рдХреЗрд╢рди
рдПрдХ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдореИрд╕реЗрдЬ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЖрд╡реЗрджрди рд╕реЗ рд╕реЗрд╡рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ
рдПрдЖрдИрдбреАрдПрд▓ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛ (рдЬреЗрдбреАрдХреЗ рдФрд░ рдЬреЗрдЖрд░рдИ), рдЧреНрд░рд╣рдг, рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рдФрд░ рдПрдбреАрдЯреА рдкреНрд▓рдЧ-рдЗрди рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╣рдмрд░рд╣рдм рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред ред
1. рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВ
рд╣рдо рдЧреНрд░рд╣рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ Ctrl + N рджрдмрд╛рдПрдВ, рдЖрдЗрдЯрдо "рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рдЪреБрдиреЗрдВ рдФрд░ рдЫрд╡рд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рдпрд╛, рдЕрдм рд╣рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреИрдХреЗрдЬ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

рдЕрдЧрд▓рд╛, рдПрдХ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

рдЕрдм рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЛ AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЧреНрд░рд╣рдг рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВ:

2. рд╕реЗрд╡рд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╕реЗрд╡рд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕рд╛рд░рдг рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ onCreate рдФрд░ onDestroy рддрд░реАрдХреЛрдВ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
рд╕реЗрд╡рд╛ рдореЗрдВ, рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рдг рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдСрдирдХреНрд░реИрдЯ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рднреЗрдЬреЗрдВ:
@Override public void onCreate() { super.onCreate(); Intent in = new Intent("AppService"); in.putExtra("Data"," ."); sendBroadcast(in); }
рд╣рдо рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡рд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд▓реЙрдЧрдХреИрдЯ рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:

3. рдбреЗрдЯрд╛ рд╕реЗрд╡рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
рдЕрдм AIDL рддрдВрддреНрд░ рдХреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдлрд╛рдЗрд▓ рдПрдбрд▓реНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

рдПрдХ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:

UpdateService.aidl рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА, рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
package ru.blagin.appservice; interface UpdateService { String UpdateSrv(String strTest); }
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрд┐рд▓реНрдб рд╡рд┐рдХрд▓реНрдк рдЕрдХреНрд╖рдо рд╣реИ, рддреЛ ADT рдкреНрд▓рдЧ-рдЗрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
ServiceConnection рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рд╕реЗрд╡рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рд╕реНрдЯреЙрдк рдХреЛ рдмрджрд▓реЗрдВ, рдФрд░ рдПрдХ рдмрдЯрди рднреА рдЬреЛрдбрд╝реЗрдВ, рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛:
package ru.blagin.appservice; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import ru.blagin.appservice.UpdateService; public class Main extends Activity { private BroadcastReceiver brService = null; UpdateService iService = null; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceDisconnected(ComponentName name) { iService = null; } public void onServiceConnected(ComponentName name, IBinder service) { iService = UpdateService.Stub.asInterface(service); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
рд╕реЗрд╡рд╛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:
package ru.blagin.appservice; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; public class MainService extends Service { Intent in = null; @Override public void onCreate() { super.onCreate(); in = new Intent("AppService"); in.putExtra("Data"," ."); sendBroadcast(in); } @Override public IBinder onBind(Intent intent) { return new UpdateService.Stub() { public String UpdateSrv(String strTest) throws RemoteException { strTest = strTest + " and service."; in.putExtra("Data"," ."); sendBroadcast(in); return strTest; } }; } @Override public void onDestroy() { super.onDestroy(); } }
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрди рдХреЛ рд╕реЗрд╡рд╛ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ рдФрд░ рд▓рд╛рдЗрди рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо
рд▓реЙрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓рдШреБ рд▓реЗрдЦ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рддрдВрддреНрд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд╛рда рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдорд╛рдирджрдВрдб рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдерд╛ "рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ?"
рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдбредрдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА
- рдкреНрд░реЛ рдПрдВрдбреНрд░реЙрдЗрдб 3 - рд╕рддреНрдпрд╛ рдХреЛрдорд╛рдЯрд┐рдиреИрдиреА, рдбреЗрд╡ рдореИрдХрд▓реЗрди, рд╕реИрдпрдж рд╣рд╛рд╢рд┐рдореА, 2011
- AIDL (Android рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рднрд╛рд╖рд╛) рдФрд░ рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди (IPC) ( umobisoft )ред