Estoy trabajando con Mark Murphy excelente Commonsware libros – pero es mucho para digerir. He construido el ‘FakePlayer’ app (pretende ser un reproductor de mp3). Contiene un servicio. Como una experiencia de aprendizaje traté de escribir un trivial de la aplicación (sólo tiene un botón), cuyo controlador haga clic en sí:
Intent i = new Intent();
i.setAction("com.example.cwfakeplayer.MyPlayerService");
Context context = getApplicationContext();
context.startService(i);
Funcionó muy bien el servicio de empezar a aceptar. Me di cuenta de Eclipse quejarse de ningún permiso en el servicio, así que he actualizado el servicio de manifiesto mediante la adición de 2 líneas, android:permisos y android:exporta:
<service
android:name="MyPlayerService"
android:permission="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION"
android:exported="true"
<intent-filter>
<action android:name="com.example.fakeplayer.MyPlayerService"></action>
</intent-filter>
</service>
Me vuelve a cargar el reproductor de la aplicación en el dispositivo (estoy usando un Galaxy S2) el uso de «debug» en eclipse. Parecía funcionar; el arranque de la aplicación causado un permiso de excepción, que yo esperaba.
Me agrega entonces el motor de arranque manifiesto de la aplicación (para darle el permiso):
<manifest
...
<uses-sdk ....
....
<uses-permission android:name="com.example.fakeplayer.permission.MY_PLAYER_PERMISSION" />
Me vuelve a cargar en el arranque de la aplicación en el dispositivo (uso de depuración en Eclipse). Aún así obtener el permiso de error en el arranque de la aplicación.
He quitado las dos aplicaciones desde el dispositivo y volver a instalar (uso de depuración…), el servicio de aplicación en primer lugar, luego de arranque. Aún así obtener perm error.
Estoy trabajando mi camino a través de la ‘cómo utilizar un servicio remoto sección’ el Señor Murphy Avanzado de Android libro, así que me di cuenta de que esta no es la mejor manera tal vez a trabajar a través de aplicaciones.
Me hizo un «adb shell dumpsys paquete’, ubicado en el arranque de la aplicación, y la encontramos ‘permissionsFixed=false’ y no ‘grantedPermissions sección. Entiendo que esto significa que el manifiesto de cambio en el arranque de la aplicación no logra obtener el perm añadido a la aplicación. Pero no tengo idea de por qué. Como una experiencia de aprendizaje, es solo generaba confusión tan lejos….
Alguna pista muy apreciado! Gracias!
Técnicamente,
android:exported="true"
es superflua, ya que la<intent-filter>
hace automáticamente el<service>
ser exportados.No mostrar donde alguna vez declarar el permiso personalizado con el
<permission>
elemento. En la práctica, si el control de ambas aplicaciones, poner la misma<permission>
elemento en ambos se manifiesta, de manera que el orden de instalación de dos de sus aplicaciones ya no importa.<permission>
elemento de permisos personalizados, ya que el uso de ellos en un plugin de ejemplo: github.com/commonsguy/cw-omnibus/tree/master/RemoteViews dicho esto, gracias por las amables palabras!android:permission
atributo no declarar un permiso personalizado.<permission>
hace.android:permission
indica que un componente debe ser defendido por un permiso (personalizada o de otra manera), pero si ese permiso no existe, no va a ser utilizado.Trate de sustituir a este en su manifiesto
lugar de
Si esto no funciona, la amabilidad de publicar su error.