I'm having a problem starting a service from another Android app (API 17). However, if I do run 'am' from the shell, the service starts fine.
# am startservice com.xxx.yyy/.SyncService Starting service: Intent { act=android.intent.action.MAIN cat= [android.intent.category.LAUNCHER] cmp=com.xxx.yyy/.SyncService } (service starts fine at this point) # am to-intent-uri com.xxx.yyy/.SyncService intent:#Intent;action=android.intent.action.MAIN; category=android.intent.category.LAUNCHER; component=com.xxx.yyy/.SyncService;end
So, it doesn't look like I'm missing anything from the intent when I do the same in the code:
Intent i = new Intent(); i.setAction(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); i.setComponent(new ComponentName("com.xxx.yyy", ".SyncService")); ComponentName c = ctx.startService(i); if (c == null) { Log.e(TAG, "failed to start with "+i); }
What I get is (the service is not running at that time):
E/tag( 4026): failed to start with Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xxx.yyy/.SyncService }
I don't have an intent filter on the service, and I don't want to set one up, I'm really trying to understand what am I doing wrong starting it through its component name, or what may be making it impossible to do so.
You should be able to start your service like this: Intent i = new Intent(); i. setComponent(new ComponentName("com. xxx.
Using intents even allows your app to start an activity that is contained in a separate app. An Intent can be explicit in order to start a specific component (a specific Activity instance) or implicit in order to start any component that can handle the intended action (such as "capture a photo").
You need to raise a intent, try like this: Uri mUri = Uri. parse("market://details?id=" + packageName); Intent mIntent = new Intent(Intent. ACTION_VIEW, mUri); startActivity(marketIntent);
You should be able to start your service like this:
Intent i = new Intent(); i.setComponent(new ComponentName("com.xxx.yyy", "com.xxx.yyy.SyncService")); ComponentName c = ctx.startService(i);
You don't need to set ACTION or CATEGORY if you are specifying a specific component. Make sure that your service is properly defined in the manifest.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With