рдЖрд╡реЗрджрди рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд

рдкрд░рд┐рдЪрдп


рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдореИрдВ рдПрдХ рдЖрд╡реЗрджрди рдФрд░ Android рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХреА рдмрд╛рддрдЪреАрдд (рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдкреНрд░рдХрд╛рд╢рди рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдпрд╣ рдмрддрд╛рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред


рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯ рдореИрд╕реЗрдЬ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЖрд╡реЗрджрди рд╕реЗ рд╕реЗрд╡рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ рдПрдЖрдИрдбреАрдПрд▓ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛ (рдЬреЗрдбреАрдХреЗ рдФрд░ рдЬреЗрдЖрд░рдИ), рдЧреНрд░рд╣рдг, рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рдФрд░ рдПрдбреАрдЯреА рдкреНрд▓рдЧ-рдЗрди рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╣рдмрд░рд╣рдм рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред ред

1. рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВ


рд╣рдо рдЧреНрд░рд╣рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ Ctrl + N рджрдмрд╛рдПрдВ, рдЖрдЗрдЯрдо "рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рдЪреБрдиреЗрдВ рдФрд░ рдЫрд╡рд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:



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



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



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



2. рд╕реЗрд╡рд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рд╕реЗрд╡рд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕рд╛рд░рдг рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ onCreate рдФрд░ onDestroy рддрд░реАрдХреЛрдВ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //  IntentFilter filter = new IntentFilter(); filter.addAction("AppService"); service = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("AppService")) { Log.i("AppService",intent.getStringExtra("Data")); } } }; registerReceiver(service, filter); //  startService(new Intent(this,MainService.class)); } @Override protected void onDestroy() { super.onDestroy(); if(service!= null){unregisterReceiver(service);} stopService(new Intent(this,MainService.class)); } 


рд╕реЗрд╡рд╛ рдореЗрдВ, рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рдг рд╕рдВрджреЗрд╢ рднреЗрдЬрдХрд░ рдкреНрд░реЗрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдСрдирдХреНрд░реИрдЯ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рднреЗрдЬреЗрдВ:

 @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); //  IntentFilter filter = new IntentFilter(); filter.addAction("AppService"); brService = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("AppService")) { Log.i("AppService",intent.getStringExtra("Data")); } } }; registerReceiver(brService, filter); //  bindService(new Intent(this,MainService.class),mConnection,BIND_AUTO_CREATE); Button bt = (Button)findViewById(R.id.buttonSend); bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { //  try { String strResult = iService.UpdateSrv("String from app"); Log.i("AppService",strResult); }catch(RemoteException e){Log.e("AppService",e.getMessage());} } }); } @Override protected void onDestroy() { super.onDestroy(); if(brService!= null){unregisterReceiver(brService);} if(mConnection!= null){unbindService(mConnection);} } } 


рд╕реЗрд╡рд╛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:

 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(); } } 


рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрди рдХреЛ рд╕реЗрд╡рд╛ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ рдФрд░ рд▓рд╛рдЗрди рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реЙрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:



рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓рдШреБ рд▓реЗрдЦ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рддрдВрддреНрд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд╛рда рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдорд╛рдирджрдВрдб рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдерд╛ "рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ?"

рдЖрд╡реЗрджрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдбред

рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА


  1. рдкреНрд░реЛ рдПрдВрдбреНрд░реЙрдЗрдб 3 - рд╕рддреНрдпрд╛ рдХреЛрдорд╛рдЯрд┐рдиреИрдиреА, рдбреЗрд╡ рдореИрдХрд▓реЗрди, рд╕реИрдпрдж рд╣рд╛рд╢рд┐рдореА, 2011
  2. AIDL (Android рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рднрд╛рд╖рд╛) рдФрд░ рдЗрдВрдЯрд░-рдкреНрд░реЛрд╕реЗрд╕ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди (IPC) ( umobisoft )ред

Source: https://habr.com/ru/post/In139831/


All Articles