2013-07-11 1 views
2

Doublons possibles:L'autorisation d'appeler le service d'une autre application

J'ai deux applications dites App « A "et App" B ". L'application A dispose d'un service avec une autorisation personnalisée et l'application B souhaite appeler ce service. À la suite de mon extrait de code

App A:: Fichier Manifest

<service 
      android:name="SendService" 
      android:permission="android.permission.MyService"> 
      <intent-filter> 
       <action android:name="com.example.calledactivity.MyServiceCaller" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:scheme="sms" /> 
       <data android:scheme="smsto" /> 
      </intent-filter> 
     </service> 

Ici, j'ai obtenu mon service en utilisant la permission android.permission.MyService

dans App B Manifest fichier ont l'autorisation suivante

<uses-permission android:name="android.permission.MyService" 
    android:description="@string/app_name" 
    android:label="@string/menu_settings" /> 

Et enfin d'appeler le service de l'App A, je suis en utilisant le code suivant dans l'App B

Intent i = new Intent("com.example.calledactivity.MyServiceCaller", Uri.parse("sms:2223333")); 
        getApplicationContext().startService(i); 

Quand je lance cet exemple je reçois SecurityException de suivre la trace de la pile

12-05 23:35:41.526: W/dalvikvm(25730): threadid=1: thread exiting with uncaught exception (group=0x40d3cac8) 
12-05 23:35:41.526: W/ActivityManager(752): Permission Denial: Accessing service ComponentInfo{com.example.calledactivity/com.example.calledactivity.SendService} from pid=25730, uid=10159 requires android.permission.MyService 
12-05 23:35:41.536: E/AndroidRuntime(25730): FATAL EXCEPTION: main 
12-05 23:35:41.536: E/AndroidRuntime(25730): java.lang.SecurityException: Not allowed to start service Intent { act=com.example.calledactivity.MyServiceCaller dat=sms:xxxx } without permission android.permission.MyService 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.app.ContextImpl.startServiceAsUser(ContextImpl.java:1714) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.app.ContextImpl.startService(ContextImpl.java:1686) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.content.ContextWrapper.startService(ContextWrapper.java:457) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at com.example.callingactivity.MainActivity$1.onClick(MainActivity.java:29) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.view.View.performClick(View.java:4383) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.view.View$PerformClick.run(View.java:18097) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.os.Handler.handleCallback(Handler.java:725) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.os.Looper.loop(Looper.java:137) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at android.app.ActivityThread.main(ActivityThread.java:5279) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at java.lang.reflect.Method.invokeNative(Native Method) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at java.lang.reflect.Method.invoke(Method.java:511) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
12-05 23:35:41.536: E/AndroidRuntime(25730): at dalvik.system.NativeStart.main(Native Method) 
12-05 23:35:41.556: D/InputDispatcher(752): Focused application set to: AppWindowToken{4231fa58 token=Token{4231df58 ActivityRecord{4231dce8 u0 com.sec.android.app.launcher/com.android.launcher2.Launcher}}} 
12-05 23:35:41.556: W/ActivityManager(752): Force finishing activity com.example.callingactivity/.MainActivity 
12-05 23:35:41.576: W/ContextImpl(752): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1379 com.android.server.am.ActivityStack.startPausingLocked:1408 com.android.server.am.ActivityStack.finishActivityLocked:5920 com.android.server.am.ActivityStack.finishActivityLocked:5834 com.android.server.am.ActivityManagerService.handleAppCrashLocked:9529 

J'ai déjà passé à travers la plupart des threads mentionnés ci-dessus, mais aucun d'entre eux ont été en mesure de résoudre mon problème. Donc, j'ai soulevé cette question à nouveau.

Merci

Répondre

2

Je pense que vous manquez la déclaration d'autorisation dans le manifeste App A.

http://developer.android.com/guide/topics/security/permissions.html Voir Déclaration et autorisations Mise en application. En outre, si les deux applications sont signées et créées par vous (avec la même signature), vous pouvez les déclarer dans les deux manifestes afin que l'ordre dans lequel elles sont installées n'affecte pas cela.

Idéalement, le nom d'autorisation doit être .permission.

+0

Merci, cela a fonctionné pour moi .. –

Questions connexes