28

He creado una actividad que solo debe iniciarse desde un enlace (utilizando un filtro de intención). No quiero que esta actividad tenga una GUI; solo quiero que inicie un servicio y poner una notificación en el bar Intenté poner el filtro de intención para el enlace en mi servicio, pero eso no funciona. ¿Hay algo mejor para hacer esto que responda a los filtros de intención, o simplemente puedo hacer que mi actividad no tenga una GUI?
Lo siento si estoy confundiendo, IsaacActividad de Android sin interfaz gráfica de usuario

+0

ahora me doy cuenta que las actividades sean única interfaz gráfica de usuario y que es su propósito por lo que tendrá que utilizar un servicio o algo más. Gracias, Isaac –

Respuesta

19

Su mejor opción parece ser usar un BroadcastReceiver. Puede crear un nuevo BroadcastReceiver que detecta la intención de desencadenar la página de información y comenzar su servicio como este:

public class MyIntentReceiver extends BroadcastReceiver {  
    @Override 
    public void onReceive(Context _context, Intent _intent) { 
    if (_intent.getAction().equals(MY_INTENT)) { 
     // TODO Broadcast a notification 
     _context.startService(new Intent(_context, MyService.class)); 
    } 
    }  
} 

Y se puede registrar este IntentReceiver directamente en el manifiesto de aplicación sin necesidad de incluirlo dentro de una actividad:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.domain.myapplication"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <service android:enabled="true" android:name="MyService"></service> 
    <receiver android:enabled="true" android:name="MyIntentReceiver"> 
     <intent-filter> 
     <action android:name="MY_INTENT" /> 
     </intent-filter> 
    </receiver> 
    </application> 
</manifest> 
+0

por favor dime qué es MY_INTENT en _intent.getAction(). Equal (MY_INTENT), lo siento si sueno ingenuo, solo soy un principiante. –

+0

Puede usar cualquier cadena que desee para identificar su intención. Tiene que ser único. Le sugiero que use "your.package.name.START_SERVICE" –

4

No estoy seguro si un servicio funcionaría, pero un receptor de transmisión definitivamente no lo haría. Las URL se inician con StartActivity(). Los receptores de transmisión no pueden responder a esto.

http://developer.android.com/reference/android/content/BroadcastReceiver.html

TLC: Tenga en cuenta que, aunque la clase Intención se utiliza para enviar y recibir estas transmisiones, el mecanismo de difusión intención aquí es totalmente independiente de Propósitos que se utilizan para iniciar actividades con Context.startActivity() . No hay forma de que BroadcastReceiver vea o capture Intents usados ​​con startActivity(); Del mismo modo, cuando transmite un Intento, nunca encontrará o iniciará una Actividad.

3

Use Service. Yo trabajo definitivamente Al hacer clic en el programa, haría su trabajo sin ninguna GUI. Use pendintgintent ... getService (MySerice.class ....). Luego, crea una nueva clase MyService que extienda la clase de servicio. Dentro de MyService.class, anule onStart() y haga lo que quiera hacer.

93

Haciendo eco de la respuesta anterior, no debe utilizar un receptor de difusión.

En la misma situación, lo que hice fue declarar el tema de esta manera:

<activity android:name="MyActivity" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.NoDisplay"> 
+3

Esta respuesta debe tener más votos positivos, porque responde la pregunta exacta que se hizo. Las otras respuestas son muy ciertas, pero esto en realidad fue muy útil y responde la pregunta que se hizo. – prolink007

+5

Por desgracia, lo respondí bien después de que se publicó, lo que probablemente explica por qué eso no sucedió. Me dieron una insignia de Nigromante fuera del trato, así como tu comentario que me hizo sonreír :) – JoeHz

+1

Esta es la respuesta correcta ABSOLUTA ya que hay cosas que no puedes hacer con un BroadcastReceiver. Actualmente me encontré con un problema, el uso de dispositivos USB. Usar un receptor Broadcast en lugar de una actividad hace que la aplicación pierda permisos cada vez que te desconectas. – blender

Cuestiones relacionadas