O iniciador personalizado do Android startActivity () bloqueia a intenção BOOT_COMPLETED
Atualmente, estou trabalhando em uma ROM personalizada (baseada no CyanogenMod 11.0), que visa implementar um "Modo de quiosque" personalizado. Para fazer isso, tenho três componentes em um aplicativo (com privilégios de sistema): O serviço, que lida com modificações na barra de status / navegação e desativa a tecla liga / desliga. O receptor, que somente inicia o serviço após oBOOT_COMPLETED
sinal recebido. oHomeIntentWrapper
funciona como o iniciador e inicia apenas uma atividade personalizada.
O problema que estou enfrentando atualmente é que ostartActivity(...)
comando noHomeIntentWrapper
de alguma forma impede o sistema de inicializar mais, e oBOOT_COMPLETED
intenção nunca é enviada.
Eu verifiquei isso com oadb shell dumpsys activity
comando, que me diz:
mStartedUsers:
User #0: mState=BOOTING
Também não mostra oBOOT_COMPLETED
transmissão já enviada.
Agora, se o usuário pressionar o botão Início, oBOOT_COMPLETED
intenção é enviada e omState
muda paraRUNNING
.
Se eu não iniciar uma atividade noHomeIntentWrapper
, a intenção é enviada. O que eu estou fazendo errado aqui?
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
}
}
}
}