El iniciador personalizado de Android startActivity () bloquea la intención BOOT_COMPLETED
Actualmente estoy trabajando en una ROM personalizada (basada en CyanogenMod 11.0), cuyo objetivo es implementar un "Modo de quiosco" personalizado. Para hacer esto, tengo tres componentes en una aplicación (con privilegios del sistema): El servicio, que maneja las modificaciones al estado / barra de navegación y deshabilita la tecla de encendido. El receptor, que solo inicia el servicio después deBOOT_COMPLETED
se recibe la señal losHomeIntentWrapper
funciona como el iniciador y solo inicia una actividad personalizada.
El problema que estoy enfrentando actualmente es que elstartActivity(...)
comando en elHomeIntentWrapper
de alguna manera bloquea el sistema para que no se inicie más, y elBOOT_COMPLETED
la intención nunca se envía.
Verifiqué esto con eladb shell dumpsys activity
comando, que me dice:
mStartedUsers:
User #0: mState=BOOTING
Tampoco muestra elBOOT_COMPLETED
emisión enviada alguna vez.
Ahora, si el usuario presiona el botón de inicio, elBOOT_COMPLETED
se envía la intención, y elmState
cambia aRUNNING
.
Si no comienzo una actividad en elHomeIntentWrapper
, se envía la intención. ¿Qué estoy haciendo mal aquí?
AndroidManifest.xml:
<manifest coreApp="true">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:allowBackup="true"
android:persistent="true" >
<service android:name="Service"
android:process=":service" >
</intent-filter>
</service>
<receiver android:name="Receiver"
android:process=":receiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity android:name="HomeIntentWrapper"
android:process=":launcher" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Receptor:
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, Service.class));
}
}
HomeIntentWrapper:
public class HomeIntentWrapper extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startApp();
}
@Override
protected void onResume() {
super.onResume();
startApp();
}
private void startApp() {
SharedPreferences sharedPrefs = getSharedPreferences(getString(R.string.settings_file), Context.MODE_MULTI_PROCESS);
String customAppIntentString = sharedPrefs.getString(getString(R.string.settings_custom_intent), "");
if(customAppIntentString.equals("") == false) {
try {
Intent intent = Intent.getIntent(customAppIntentString);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch(java.net.URISyntaxException e) {
// Intentionally
}
}
}
}