Hi, I am coming back to you on a related issue. Now the situation is like this: I have application App1 which hosts the service and also has the client Activity. Plus I have App2 which has an ActivityGroup. I launch App1 client Activity from this App2 ActivityGroup.
The client Activity code is like this - Intent intent = new Intent("com.abc.xyz.service.BackgroundService", null, this, com.abc.xyz.service.BackgroundService.class); startService(intent); result = bindService(intent, mConnection, Context.BIND_AUTO_CREATE); and the service element in the manifest like this - <service android:name=".service.BackgroundService" android:permission="com.abc.permission.ACCESS_BACKGROUND_SERVICE" android:process=":remote" android:exported="true"> <intent-filter> <action android:name="com.abc.xyz.service.BackgroundService" /> </intent-filter> </service> The uses-permission tag remains in the client manifest file, which is the service manifest file too (since they are in the same app). I have put the same uses-permission tag in the manifest file of App2 as well - <uses-permission android:name="com.abc.permission.ACCESS_BACKGROUND_SERVICE" /> When I launch App1 client Activity directly, it runs fine. Service gets initiated and bound to. But when I launch App1 client Activity via App2 ActivityGroup, I get these logs - - WARN/ActivityManager(51): Binding with unknown activity: [EMAIL PROTECTED] - INFO/ActivityManager(51): Start proc com.abc.xyz:remote for service com.abc.xyz/.service.BackgroundService: pid=417 uid=10015 gids={3003} and the value of 'result' is 'false'. I am loading App1 first, then App2 into the emulator. On Nov 11, 10:25 pm, Raktim Das <[EMAIL PROTECTED]> wrote: > Thanks a ton. It worked! > > On Nov 11, 3:42 pm, hackbod <[EMAIL PROTECTED]> wrote: > > > Be sure you install the .apk providing the permission before the one > > using it. You can see what permissions your app has been granted by > > digging through the output of "adb shell dumpsys package". > > > Also PLEASE DO NOT use the name "android.permission." The namespaces > > "android.* and "com.android.*" are reserved for the android platforms, > > and applications MUST NOT USE THEM. > > > On Nov 11, 11:43 am, Raktim Das <[EMAIL PROTECTED]> wrote: > > > > Thanks a lot for analyzing the problem. > > > > First, my comment on your second point - > > > This I had already been doing - as in the client application's > > > manifest, the service application's manifest too has this entry under > > > the manifest tag: > > > <uses-permission > > > android:name="android.permission.ACCESS_BACKGROUND_SERVICE" /> > > > > Now coming to the first point, I changed the client code line from - > > > Intent intent = new Intent(this, > > > com.abc.xyz.service.BackgroundService.class); > > > to > > > Intent intent = new Intent("com.abc.xyz.service.BackgroundService"); > > > > After the change, it seems the service is identified and the earlier > > > warning message - > > > "Unable to start service Intent{ comp={com.abc.xyz.client/ > > > com.abc.xyz.service.BackgroundService} }:not found " > > > is not coming. > > > But then the permission related SecurityException is coming at the > > > client statement "startService(intent)" as below: > > > > - WARN/PackageManager(57): Not granting permission > > > android.permission.ACCESS_BACKGROUND_SERVICE to package > > > com.abc.xyz.client (protectionLevel=3 flags=0x44) > > > - ERROR/AndroidRuntime(1111): ERROR: thread attach failed > > > - WARN/ActivityManager(57): Permission Denial: Accessing service > > > ComponentInfo{com.abc.xyz/com.abc.xyz.service.BackgroundService} from > > > pid=57, uid=1000 requires android.permission.ACCESS_BACKGROUND_SERVICE > > > - ERROR/AndroidRuntime(1120): java.lang.RuntimeException: Unable to > > > start activity ComponentInfo{com.abc.xyz.client/ > > > com.abc.xyz.client.ClientActivity}: java.lang.SecurityException: Not > > > allowed to start service Intent > > > { action=com.abc.xyz.service.BackgroundService } without permission > > > android.permission.ACCESS_BACKGROUND_SERVICE > > > > I think I am missing something with the declaration of permission in > > > the manifest(s). What is your opinion? > > > > Thanks, > > > Raktim. > > > > On Nov 11, 4:48 am, hackbod <[EMAIL PROTECTED]> wrote: > > > > > The Intent you are making to bind to the service is trying to find a > > > > component in your own .apk, not the other. > > > > > The last permission error you mention is because you need to > > > > explicitly request to use even your own permissions. > > > > > On Nov 10, 9:31 pm, Raktim Das <[EMAIL PROTECTED]> wrote: > > > > > > Hi, > > > > > I am using 0.9 beta SDK. > > > > > I want to have a service defined within one application to be > > > > > invokable from another. > > > > > The application hosting the service has, in its manifest, the > > > > > following inside the application tag: > > > > > > <service android:name=".service.BackgroundService" > > > > > android:process=":remote" android:exported="true" > > > > > android:permission="android.permission.ACCESS_BACKGROUND_SERVICE"> > > > > > <intent-filter> > > > > > <action > > > > > android:name="com.abc.xyz.service.BackgroundService" /> > > > > > </intent-filter> > > > > > </service> > > > > > > It also has the following inside the manifest tag: > > > > > <permission android:name="android.permission.BACKGROUND_SERVICE" > > > > > android:protectionLevel="dangerous"/> > > > > > > In my client application's manifest xml file, I have the following > > > > > inside manifest tag: > > > > > <uses-permission > > > > > android:name="android.permission.ACCESS_BACKGROUND_SERVICE" /> > > > > > > The client Activity code has the following API called from its > > > > > onCreate() method: > > > > > > private void startBackgroundService() > > > > > { > > > > > mConnection = new ServiceConnection() > > > > > { > > > > > public void onServiceConnected(ComponentName className, > > > > > IBinder service) > > > > > { > > > > > Log.i(TAG, "Connected to background service"); > > > > > mService = > > > > > BackgroundService.Stub.asInterface(service); > > > > > } > > > > > > public void onServiceDisconnected(ComponentName className) > > > > > { > > > > > mService = null; > > > > > Log.i(TAG, "Background service disconnected"); > > > > > } > > > > > }; > > > > > > Intent intent = new Intent(this, > > > > > com.abc.xyz.service.BackgroundService.class); > > > > > > startService(intent); > > > > > > boolean result = bindService(intent, mConnection, > > > > > Context.BIND_AUTO_CREATE); > > > > > > Log.i(TAG, "Background service bind result: " + result); > > > > > } > > > > > > When I run the client Activity, it can not bind to the service: > > > > > - the log statement at the end has "Background service bind result: > > > > > false". > > > > > - the onServiceConnected() method is not called > > > > > - There is a waring log from ActivityManager: > > > > > WARN/ActivityManager(58): Unable to start service Intent > > > > > { comp={com.abc.xyz.client/com.abc.xyz.service.BackgroundService} }: > > > > > not found > > > > > > I have tried running the same without any permission in the service > > > > > application manifest and also without the uses-permission tag in > > > > > client. The result was the same. > > > > > > But when I run a similar client code inside my service application > > > > > (without specifying any permissions), it runs perfectly. > > > > > > Finally, the most peculiar thing is happening when I am running this > > > > > client code inside my service application but with the permissions > > > > > specified (as written above) in the manifest - it runs with this error > > > > > at the statement "startService(intent)": > > > > > > Caused by: java.lang.SecurityException: Not allowed to start service > > > > > Intent { comp={com.abc.xyz/com.abc.xyz.service.BackgroundService} } > > > > > without permission android.permission.ACCESS_BACKGROUND_SERVICE > > > > > > Any hint on this will be highly appreciated. I'd also like to know > > > > > whether I can start and access the service from an ActivityGroup > > > > > outside the service application domain. > > > > > > Thanks, > > > > > -Raktim. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---