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

