7

default ho impostato la mia attività di launcher di default per intercettare i clic sui pulsanti a casa in questo modo:Rimuovere attività come Launcher

<activity 
    android:name=".ExampleActivity" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     <category android:name="android.intent.category.HOME" />   
     <category android:name="android.intent.category.DEFAULT" />    
    </intent-filter> 
</activity> 

Quando la mia attività, ExampleActivity viene lanciato, se clicco sul chiave casa, ottengo sollecitato a scegliere. Se seleziono rendi questo il mio valore predefinito e scelgo la mia attività, sono bloccato nella mia attività come desiderato.

Il problema è che quando esco dall'attività, provo a rimuovere la mia attività dal programma di avvio predefinito, ma non riesco.

ho provato:

ComponentName componentName = new ComponentName( 
        "com.example.exampleactivity", 
        "com.example.exampleactivity.class"); 

pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); 

E:

PackageManager pm = getActivity().getPackageManager(); 
      ComponentName name = new ComponentName(this, "com.example.exampleactivity.class"); 
      pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

Ma la mia designazione per la casa è mai rimosso.

Qualcuno ha un modo funzionante per risolvere quanto sopra?

Avevo solo il pulsante home come predefinito per un'attività specifica, non la mia intera applicazione. Quando esco dall'attività, dovrebbe essere rimosso e ripristinato di default.

+0

Aggiornamento: Stai ancora cercando una risposta per questo. –

+0

Ciao Mike Mackintosh. Hai trovato una soluzione per questo. Ho bloccato lo stesso problema. – Kaifi

risposta

1

Non è possibile sovrascrivere il comportamento del tasto Home in base alla propria applicazione; questa è una decisione progettuale di Google, per garantire che l'utente possa sempre tornare a una posizione statica. Potrebbero esserci alcuni modi per aggirare questo problema (se ancora esistono) ma sono bug non intenzionali su cui un'applicazione non dovrebbe fare affidamento.

La risposta breve: è possibile avere qualsiasi tasto tranne la chiave di casa.

+6

Il problema non sta impostando l'utilizzo della chiave home, ma in seguito restituendo l'utilizzo normale. All'utente viene richiesto di utilizzare l'attività come app di avvio predefinita. Questo è di progettazione e desiderato. Non voglio cambiare questo. Voglio essere in grado di rimuovere la mia attività dal programma di avvio al termine dell'attività e restituire il programma di avvio ai valori predefiniti. Questo è dove si trova il problema. –

+0

Non è proprio questo il problema ...il problema è che il tuo design non è permesso da Android. Le normali applicazioni non hanno la capacità di fare ciò che stai cercando di fare, perché mentre potresti voler dire bene, rende fin troppo facile per un'applicazione dannosa causare problemi all'utente. Potresti essere in grado di aggirare il problema disabilitando la tua attività di casa. Vedi https://groups.google.com/forum/?fromgroups=#!topic/android-developers/dLEAFXONtIA per una breve discussione in cui sembra che qualcuno abbia voluto esattamente quello che vuoi e abilitato/disabilitato lo abbia aiutato. – mah

+1

È perfettamente consentito se si richiedono le autorizzazioni corrette. Non dovresti farlo per un lettore video ma ci sono motivi validi per registrarti come app home dell'utente. Ad esempio, un'app di blocco per bambini. – Bostwickenator

1

Dai un'occhiata all'autorizzazione android.permission.SET_PREFERRED_APPLICATIONS. Anche questo metodo http://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)

+0

Hanno già provato questo, ma in 4.x, questo genera un errore di permessi dell'utente senza alcun modo di aggirarlo. –

+0

Puoi solo disassarti. Non vedo alcun bug per questo. Sei sicuro di farlo correttamente? – Bostwickenator

+0

Probabilmente no. I campioni di documentazione e codice sono molto scarsi. Hai qualche esempio? –

13

se è la vostra applicazione che si sta compensazione i suoi valori predefiniti, si può semplicemente chiamare:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

poi, al fine di mostrare la finestra di dialogo di scegliere quale programma di avvio da utilizzare, uso:

final Intent intent=new Intent(); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
startActivity(intent); 
+0

Ha preso la fine del mondo per questa domanda per ottenere risposta;) Grazie, provandolo! –

+0

Come è venuto fuori? – TacB0sS

+1

Si scopre che il richiedente non si è preoccupato di tornare a questa domanda per confermare i risultati. – Arvin

2

Questa soluzione è un modo intelligente di farlo: Clearing and setting the default home application

Il codice in onResume() va in fondo in questo modo:

ComponentName componentName = new ComponentName(MyActivity.this, FakeHome.class); 
    if (!isMyLauncherDefault()) { 
     Log.e(TAG, "MyActivity is not default home activity!"); 

     // toggle fake activity 
     PackageManager pm = getPackageManager(); 
     int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED 
       : PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 
     pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP); 

     // start home activity to enable chooser 
     Intent selector = new Intent(Intent.ACTION_MAIN); 
     selector.addCategory(Intent.CATEGORY_HOME); 
     startActivity(selector); 
    } 

e il metodo isMyLauncherDefault() è preso da qui: How to check if my application is the default launcher