Hi,

Depends on what you are trying to achieve, suggest you look at Context
Provider as a general means of sharing data across apps.

http://developer.android.com/guide/topics/providers/content-providers.html

Regards

On Jan 21, 1:22 am, Hari Kumar <[email protected]> wrote:
> Hi All,
>
> Currently I am trying to access the Service which is implemented in
> one application and accessed by another application. But it is not
> happening.
>
> Below I explain the code for reference, Please check it out.
> Consider the implemented Service application as "Server" and accessing
> the Service application as "Client".
>
> IRemoteService.aidl:(This class is append in both the Server and
> Client application)
> interface IRemoteService {
>         int getCounter();
>
> }
>
> Server Application:
> RemoteService:(This is Service implemented class)
> public class RemoteService extends Service {
>
>         private Handler serviceHandler;
>         private int counter;
>         private Task myTask = new Task();
>
>         @Override
>         public IBinder onBind(Intent arg0) {
>                 Log.d(getClass().getSimpleName(), "onBind()");
>                 return remoteServiceStub;
>         }
>
>         private IRemoteService.Stub remoteServiceStub =
>                 new IRemoteService.Stub() {
>                         public int getCounter() throws RemoteException {
>                                 return counter;
>                 }};
>
>         @Override
>         public void onCreate() {
>                 super.onCreate();
>                 Log.d(getClass().getSimpleName(),"onCreate()");
>         }
>
>         @Override
>         public void onDestroy() {
>                 super.onDestroy();
>                 serviceHandler.removeCallbacks(myTask);
>                 serviceHandler = null;
>                 Log.d(getClass().getSimpleName(),"onDestroy()");
>         }
>
>         @Override
>         public void onStart(Intent intent, int startId) {
>                 super.onStart(intent, startId);
>                 serviceHandler = new Handler();
>                 serviceHandler.postDelayed(myTask, 1000L);
>                 Log.d(getClass().getSimpleName(), "onStart()");
>         }
>
>         class Task implements Runnable {
>                 public void run() {
>                         ++counter;
>                         serviceHandler.postDelayed(this,1000L);
>                         Log.i(getClass().getSimpleName(),
>                                         "Incrementing counter in the run 
> method");
>                 }
>         }}
>
> Manifest file for Server Application:
> <service android:name="RemoteService" android:exported="true"
> android:enabled="true">
> </service>
>
> Client Application:
> RemoteServiceClientDemo : (This class accessing the method in the
> interface)
> public class RemoteServiceClientDemo extends Activity {
>
>         private IRemoteService remoteService;
>         private boolean started = false;
>         private RemoteServiceConnection conn = null;
>
>         /** Called when the activity is first created. */
>     @Override
>     public void onCreate(Bundle savedInstanceState) {
>         super.onCreate(savedInstanceState);
>         setContentView(R.layout.main);
>
>         Button start = (Button)findViewById(R.id.startButton);
>         Button stop = (Button)findViewById(R.id.stopButton);
>         Button bind = (Button)findViewById(R.id.bindButton);
>         Button release = (Button)findViewById(R.id.releaseButton);
>         Button invoke = (Button)findViewById(R.id.invokeButton);
>
>         start.setOnClickListener(new OnClickListener() {
>                 public void onClick(View v){
>                         startService();
>                 }
>         });
>
>         stop.setOnClickListener(new OnClickListener() {
>                 public void onClick(View v){
>                         stopService();
>                 }
>         });
>
>         bind.setOnClickListener(new OnClickListener() {
>                 public void onClick(View v){
>                         bindService();
>                 }
>         });
>
>         release.setOnClickListener(new OnClickListener() {
>                 public void onClick(View v){
>                         releaseService();
>                 }
>         });
>
>         invoke.setOnClickListener(new OnClickListener() {
>                 public void onClick(View v){
>                         invokeService();
>                 }
>         });
>     }
>
>     private void startService(){
>         if (started) {
>                 Toast.makeText(RemoteServiceClientDemo.this,
>                                 "Service already started", 
> Toast.LENGTH_SHORT).show();
>         } else {
>                 Intent i = new Intent();
>                 i.setClassName("com.demo",
>                         "com.demo.RemoteService");
>                 startService(i);
>                 started = true;
>                 updateServiceStatus();
>                 Log.d( getClass().getSimpleName(), "startService()" );
>         }
>     }
>
>     private void stopService() {
>         if (!started) {
>                 Toast.makeText(RemoteServiceClientDemo.this,
>                 "Service not yet started", Toast.LENGTH_SHORT).show();
>         } else {
>                 Intent i = new Intent();
>                 i.setClassName("com.demo",
>                         "com.demo.RemoteService");
>                 stopService(i);
>                 started = false;
>                 updateServiceStatus();
>                 Log.d( getClass().getSimpleName(), "stopService()" );
>         }
>     }
>
>     private void bindService() {
>         if(conn == null) {
>                 conn = new RemoteServiceConnection();
>                 Intent i = new Intent();
>                 i.setClassName("com.demo",
>                                 "com.demo.RemoteService");
>                 bindService(i, conn, Context.BIND_AUTO_CREATE);
>                 updateServiceStatus();
>                 Log.d( getClass().getSimpleName(), "bindService()" );
>         } else {
>                 Toast.makeText(RemoteServiceClientDemo.this,
>                         "Cannot bind - service already bound",
> Toast.LENGTH_SHORT).show();
>         }
>     }
>
>     private void releaseService() {
>         if(conn != null) {
>                 unbindService(conn);
>                 conn = null;
>                 updateServiceStatus();
>                 Log.d( getClass().getSimpleName(), "releaseService()" );
>         } else {
>                 Toast.makeText(RemoteServiceClientDemo.this,
>                         "Cannot unbind - service not bound",
> Toast.LENGTH_SHORT).show();
>         }
>     }
>
>     private void invokeService() {
>         if(conn == null) {
>                 Toast.makeText(RemoteServiceClientDemo.this,
>                         "Cannot invoke - service not bound",
> Toast.LENGTH_SHORT).show();
>         } else {
>                 try {
>                         int counter = remoteService.getCounter();
>                         TextView t = 
> (TextView)findViewById(R.id.notApplicable);
>                         t.setText( "Counter value: "+Integer.toString( 
> counter ) );
>                         Log.d( getClass().getSimpleName(), "invokeService()" 
> );
>                 } catch (RemoteException re) {
>                         Log.e( getClass().getSimpleName(), "RemoteException" 
> );
>                 }
>         }
>     }
>
>     class RemoteServiceConnection implements ServiceConnection {
>         public void onServiceConnected(ComponentName className,
>                         IBinder boundService ) {
>             remoteService =
> IRemoteService.Stub.asInterface((IBinder)boundService);
>             Log.d( getClass().getSimpleName(),
> "onServiceConnected()" );
>         }
>
>         public void onServiceDisconnected(ComponentName className) {
>             remoteService = null;
>             updateServiceStatus();
>             Log.d( getClass().getSimpleName(),
> "onServiceDisconnected" );
>         }
>     };
>
>       private void updateServiceStatus() {
>           String bindStatus = conn == null ? "unbound" : "bound";
>           String startStatus = started ? "started" : "not started";
>           String statusText = "Service status: "+
>                                                         bindStatus+ ","+ 
> startStatus;
>           TextView t = (TextView)findViewById( R.id.serviceStatus);
>           t.setText( statusText );
>         }
>
>       protected void onDestroy() {
>           super.onDestroy();
>           releaseService();
>           Log.d( getClass().getSimpleName(), "onDestroy()" );
>       }
>
> }
>
> Manifest file for Client application:
> <?xml version="1.0" encoding="utf-8"?>
> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>       package="com.demo"
>       android:versionCode="1"
>       android:versionName="1.0">
>     <application android:icon="@drawable/icon" android:label="@string/
> app_name">
>                 <activity android:name=".RemoteServiceClientDemo"
>                   android:label="@string/app_name">
>             <intent-filter>
>                 <action android:name="android.intent.action.MAIN" />
>                 <category
> android:name="android.intent.category.LAUNCHER" />
>             </intent-filter>
>         </activity>
>
>     </application>
>         <uses-sdk android:minSdkVersion="3" />
> </manifest>
>
> Thanks
> Hari

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to