Tengo una actividad y un servicio que funcionan en conjunto en mi aplicación. Configuré el servicio como un servicio remoto (AIDL implementado) para que siga ejecutándose incluso cuando la actividad no esté visible.Suprimir las notificaciones de un servicio si la actividad se está ejecutando
El servicio es responsable de sondear un servidor de datos y enviar notificaciones de alerta cuando se cumplen ciertos criterios. No deseo que el Servicio envíe estas notificaciones cuando la Actividad esté visible.
¿Hay alguna manera de que el Servicio conozca el estado de una actividad en particular? En particular, una actividad que está vinculada a ella?
actualizado con manifiesta para solucionar problema de permisos:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.interact.listen.android.voicemail"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MyAppName"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MyObjectDetails"/>
<service android:enabled="true" android:name=".MyService" />
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.foo.bar.EVENT"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
El error que estoy recibiendo en Logcat:
09-17 15:33:17.881: WARN/ActivityManager(53): Permission Denial: receiving Intent { act=com.foo.bar.myobject.EVENT (has extras) } to ProcessRecord{43928b40 223:com.foo.bar.myobject/10022} (pid=223, uid=10022) requires com.foo.bar.myobject.EVENT due to sender com.foo.bar.myobject (uid 10022)
09-17 15:33:48.901: WARN/ActivityManager(53): Permission Denial: receiving Intent { act=com.foo.bar.myobject.EVENT (has extras) } to com.foo.bar.myobject requires com.foo.bar.myobject.EVENT due to sender com.foo.bar.myobject (uid 10022)
de tareas que envía la emisión:
@Override
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
serviceHandler = new Handler();
serviceHandler.postDelayed(myTask, 100L);
Log.d(TAG, "onStart()");
}
class Task implements Runnable
{
public void run()
{
Log.i(TAG, "Getting myObjects...");
getMyObjects();
Bundle bundle = new Bundle();
bundle.putLongArray("ids", getIdsToUpdate());
Intent i = new Intent();
i.setAction(UPDATE_ACTION_STRING);
i.putExtras(bundle);
sendOrderedBroadcast(i, UPDATE_ACTION_STRING);
serviceHandler.postDelayed(this, 30000L);
}
}
}
Esto es perfecto para lo que estoy tratando de hacer, como lo mencionó en su publicación de blog. Me encontré con un problema antes de pensar que todo funcionará. Me están diciendo que una denegación de permiso básicamente impide mi actividad y que mi receptor de difusión no reciba la intención. Solo uso un permiso (INTERNET) en mi manifiesto (actualicé la pregunta con él). ¿Por qué estoy obteniendo esto? – twilbrand
@twilbrand: No tengo idea. ¿Cómo estás enviando la transmisión? – CommonsWare
Desde mi servicio remoto. Tengo una tarea que se ejecuta cada 30 segundos. He agregado el código a la pregunta. – twilbrand