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
            }
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta