2016-12-20 15 views
1

ランチャーをデフォルトランチャーにしたい。私のコードはLeTtvデバイスの多くの人にはうまく働いていますが、正しく働いています。 は、デフォルトのアプリ設定からデフォルトのランチャーを設定しているためです。デフォルトのランチャーをプログラムから設定する方法

このコードを実行すると、デフォルトのランチャーに移動しますが、ランチャーの選択ウィジェットはLeTvデバイスでのみ表示されます。

デフォルトのアプリ選択を開く設定?デフォルトのランチャー

private void setDefLauncher(Context c) { 



    PackageManager p = c.getPackageManager(); 
    ComponentName cN = new ComponentName(c, FakeLauncher.class); 
    p.setComponentEnabledSetting(cN, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 

    Intent selector = new Intent(Intent.ACTION_MAIN); 
    selector.addCategory(Intent.CATEGORY_HOME); 
    c.startActivity(selector); 

    p.setComponentEnabledSetting(cN, 
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
      PackageManager.DONT_KILL_APP); 
} 

のAndroidManifest.xml

 <activity 
      android:name="com.android.launcher.launcher3.Launcher" 
      android:clearTaskOnLaunch="true" 
      android:enabled="true" 
      android:excludeFromRecents="true" 
      android:launchMode="singleTask" 
      android:resumeWhilePausing="true" 
      android:screenOrientation="nosensor" 
      android:stateNotNeeded="true" 
      android:taskAffinity="" 
      android:theme="@style/Theme" 
      android:windowSoftInputMode="adjustPan" > 
      <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" /> 
       <category android:name="android.intent.category.MONKEY" /> 
      </intent-filter> 
     </activity> 
    <activity 
      android:name="com.launcher2.activitys.FakeLauncher" 
      android:enabled="false" 
      android:excludeFromRecents="true" > 
      <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> 

を選択するために

は私のコードセットのデフォルトのランチャーを手動 設定 - >アプリケーションマネージャ - >デフォルトアプリの設定 - >ランチャーを設定する enter image description here

答えて

2

私は、検索でグーグルStackOverflowの & Githubのませんでしたが、私が見つけた何も、私の運一部Luncherによって がLevt & MI電話でHomeStting活動をリダイレクトするために私を助け、それは私の期待通りの仕事です。 いくつかの点では、それは完璧な作業です、私はそれを逆コンパイルし、それのために使用されるコードを取得します。セットのデフォルトのランチャー

new SetDefaultLauncher(activity).launchHomeOrClearDefaultsDialog(); 

ため

package com.android.launcher; 

import java.util.List; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.content.pm.ResolveInfo; 
import android.net.Uri; 
import android.os.Build.VERSION; 
import android.text.SpannableString; 
import android.text.style.TtsSpan.TextBuilder; 
import com.example.launcher.R; 
import com.launcher2.activitys.FakeLauncher; 

public class SetDefaultLauncher { 

    public static final String LAUNCHER_CLASS = "com.android.launcher.launcher3.Launcher"; 
    public static final String LAUNCHER_PACKAGE = "com.android.launcher"; 

    Activity activity; 
    SetDefaultLauncher(Activity activity){ 
     this.activity=activity; 
    } 
    enum HomeState { 
     GEL_IS_DEFAULT, OTHER_LAUNCHER_IS_DEFAULT, NO_DEFAULT 
    } 
    public boolean launchHomeOrClearDefaultsDialog() { 
     Intent intent = new Intent("android.intent.action.MAIN"); 
     intent.addCategory("android.intent.category.HOME"); 
     ResolveInfo resolveActivity = activity.getPackageManager().resolveActivity(
       intent, 0); 
     HomeState homeState = (LAUNCHER_PACKAGE 
       .equals(resolveActivity.activityInfo.applicationInfo.packageName) && LAUNCHER_CLASS 
       .equals(resolveActivity.activityInfo.name)) ? HomeState.GEL_IS_DEFAULT 
       : (resolveActivity == null 
         || resolveActivity.activityInfo == null || !inResolveInfoList(
         resolveActivity, activity.getPackageManager() 
           .queryIntentActivities(intent, 0))) ? HomeState.NO_DEFAULT 
         : HomeState.OTHER_LAUNCHER_IS_DEFAULT; 
     switch (homeState) { 
     case GEL_IS_DEFAULT: 
     case NO_DEFAULT: 
      intent = new Intent("android.intent.action.MAIN"); 
      intent.addCategory("android.intent.category.HOME"); 
      intent.setFlags(268435456); 
      activity.startActivity(intent); 
      return true; 
     default: 
      showClearDefaultsDialog(resolveActivity); 
      return false; 
     } 
    } 
    @SuppressLint("NewApi") private void showClearDefaultsDialog(ResolveInfo resolveInfo) { 
     CharSequence string; 
     final Intent intent; 
     CharSequence loadLabel = resolveInfo.loadLabel(activity.getPackageManager()); 
     if (VERSION.SDK_INT < 21 
       || activity.getPackageManager().resolveActivity(
         new Intent("android.settings.HOME_SETTINGS"), 0) == null) { 
      string = activity.getString(R.string.change_default_home_dialog_body, 
        new Object[] { loadLabel }); 
      intent = new Intent(
        "android.settings.APPLICATION_DETAILS_SETTINGS", 
        Uri.fromParts("package", 
          resolveInfo.activityInfo.packageName, null)); 
     } else { 
      intent = new Intent("android.settings.HOME_SETTINGS"); 
      string = new SpannableString(activity.getString(
        R.string.change_default_home_dialog_body_settings, 
        new Object[] { loadLabel })); 
      ((SpannableString) string) 
        .setSpan(
          new TextBuilder(
            activity.getString(
              R.string.change_default_home_dialog_body_settings_tts, 
              loadLabel)).build(), 0, string 
            .length(), 18); 
     } 



     new AlertDialog.Builder(activity) 
       .setIcon(R.drawable.ic_launcher) 
       .setMessage(string) 
       .setNegativeButton(
         activity.getString(R.string.change_default_home_dialog_cancel), 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           // TODO Auto-generated method stub 
           activity.finish(); 
          } 
         }) 
       .setOnCancelListener(new DialogInterface. OnCancelListener() { 

        @Override 
        public void onCancel(DialogInterface dialog) { 
         // TODO Auto-generated method stub 
         activity.finish(); 
        } 
       }) 
       .setPositiveButton(
         activity.getString(R.string.change_default_home_dialog_proceed), 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           // TODO Auto-generated method stub 
           try { 
            intent.setFlags(276856832); 
            activity.startActivity(intent); 
           } catch (Exception e) { 
            setDefLauncher(activity); 
           } 
          } 
         }).create().show(); 
    } 

    private boolean inResolveInfoList(ResolveInfo resolveInfo, 
      List<ResolveInfo> list) { 
     for (ResolveInfo resolveInfo2 : list) { 
      if (resolveInfo2.activityInfo.name 
        .equals(resolveInfo.activityInfo.name) 
        && resolveInfo2.activityInfo.packageName 
          .equals(resolveInfo.activityInfo.packageName)) { 
       return true; 
      } 
     } 
     return false; 
    } 

    private void setDefLauncher(Context c) { 
     PackageManager p = c.getPackageManager(); 
     ComponentName cN = new ComponentName(c, FakeLauncher.class); 
     p.setComponentEnabledSetting(cN, 
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
       PackageManager.DONT_KILL_APP); 

     Intent selector = new Intent(Intent.ACTION_MAIN); 
     selector.addCategory(Intent.CATEGORY_HOME); 
     c.startActivity(selector); 
     p.setComponentEnabledSetting(cN, 
       PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
       PackageManager.DONT_KILL_APP); 
    } 
} 
関連する問題