2016-10-05 3 views
0

Ich baue einen benutzerdefinierten Launcher für eine Kindermodus-App. Ich habe dieses link verfolgt, um eine Launcher-Auswahl zu erstellen, damit Benutzer meine App als Standardstartprogramm auswählen können.Erstellen Sie einen benutzerdefinierten Android-Launcher

Das Problem ist, wenn es einen Standard-Launcher in ihren Geräten gibt, funktioniert der Code in der obigen Verknüpfung nicht. Ich teste auf Zenphone5, Android 4.4.2. Ich habe einige Leute gesehen, die das gleiche Problem haben, Launcher Picker auf Android 4.4.2 zu erstellen.

Ich habe überall auf wie man einen Werfer Picker wie diese zu erstellen: Nester, iWawa. Wie können sie das tun?

AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="ttb.com.kidmode"> 

<!-- Hide status bar --> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

<!-- Hide the recent apps --> 
<uses-permission android:name="android.permission.REORDER_TASKS" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Holo.Light"> 
    <activity android:name=".activity.MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".activity.KidModeActivity" 
     android:enabled="false"> 
     <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> 

Launcher Picker Dialog erstellen:

if (isMyLauncherDefault() == false) { // enable fake home to force system to clear default 

    Log.v(">>>", "false"); 
    ComponentName launcherActivity = new ComponentName(this, KidModeActivity.class); 
    getPackageManager().setComponentEnabledSetting(launcherActivity, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 
    goHome(); 

} else { 
    // Go home 
    goHome(); 
} 

Durch Drücken der Home-Taste:

private void goHome() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(startMain); 
} 

EDIT

Die ganze Geschichte ist: „Ich habe meine App öffnen, und klicken Sie auf eine Schaltfläche, um meine Launcher zu gehen -> nichts passiert (weil ein anderer Launcher als Standard gesetzt ist). Wenn ich diese Launcher-Einstellung öffne (Einstellungen -> Apps -> ..) und auf "Standard löschen" klicke, öffne meine App erneut, klicke auf die Schaltfläche, um zu meinem Launcher zu gelangen -> Der Dialog wird angezeigt. Ab jetzt funktioniert der Code gut“. Ich habe nicht Einstellung öffnen möchten, klicken Sie auf "Clear Defalt"

+0

Beitrag Dein Code und dein Manifest, da ist wahrscheinlich etwas, was dir fehlt – njzk2

+0

Hi @ njzk2 nur Code hinzugefügt. Bitte überprüfen Sie es – Liar

+0

Also was passiert, wenn 'goHome' aufgerufen wird? – njzk2

Antwort

0

Wenn das Sie das gleiche Problem haben wie ich, hier ist die Antwort, die ich für 2 Monate gefunden. Hoffe, dass es jemand helfen.

Wenn diese link funktioniert nicht.

Hier

ist die Lösung: Verwenden Sie aktivitäts alias

AndroidManifest.xml

<activity 
     android:name=".activity.KidModeActivity" 
     android:exported="true" 
     android:launchMode="singleTask"> 
    </activity> 
    <activity-alias 
     android:name="LauncherAlias1" 
     android:label="Kids Mode Launcher" 
     android:targetActivity=".activity.KidModeActivity" > 
     <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-alias> 

    <activity-alias 
     android:name="LauncherAlias2" 
     android:enabled="false" 
     android:targetActivity=".activity.KidModeActivity" > 
     <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-alias> 

irgendwo den Launcher Picker erstellen:

public static void createLauncherPicker(Context context) { 
    Log.v(">>>", "create launcher picker"); 
    PackageManager pm = context.getPackageManager(); 
    ComponentName cn1 = new ComponentName(GlobalValue.APP_NAME, GlobalValue.LAUNCHER_ALIAS_1); // Ex: "com.kidmod.android", "com.kidmod.android.LauncherAlias1" 
    ComponentName cn2 = new ComponentName(GlobalValue.APP_NAME, GlobalValue.LAUNCHER_ALIAS_2); 
    int dis = PackageManager.COMPONENT_ENABLED_STATE_DISABLED; 
    if(pm.getComponentEnabledSetting(cn1) == dis) dis = 3 - dis; 
    pm.setComponentEnabledSetting(cn1, dis, PackageManager.DONT_KILL_APP); 
    pm.setComponentEnabledSetting(cn2, 3 - dis, PackageManager.DONT_KILL_APP); 
} 

Dank dieser greate Antwort: link

0

Sie "<category android:name="android.intent.category.HOME" />" in Intent-Filter von AndroidManifest.xml Datei geben müssen.

bitte folgenden Link verweisen. http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

+0

Meinst du ? Ich habe diese Zeilen. Wenn ich meine Standard-Launcher-Einstellung öffne und den Standardwert lösche. Dann erneut ausführen, der Launcher-Auswahldialog wird angezeigt. – Liar

+0

Wenn Sie können dann bitte Ihren Code posten. – shripal

+0

Ich habe gerade Code hinzugefügt. Bitte helfen @ shripal – Liar

Verwandte Themen