안 드 로 이 드 는 Launcher 선택 을 꺼 내지 않 고 기본 Launcher 가 필요 합 니 다.

4109 단어 androidlauncher
두 편의 문장 을 참고 했다.
http://blog.csdn.net/jia4525036/article/details/18036765
http://blog.sina.com.cn/s/blog_4ad8d46c01019zq4.html
항목 의 수요 가 변경 되 었 기 때문에, 여기 서 보류 한 후에 편리 하 게 사용 할 수 있 습 니 다.
 frameworks / base / core / java / com / android / internal / app / Resolver Activity. java 에서 수정
필요 에 따라 기본 Launcher 를 설정 합 니 다.
private void setDefaultLauncher(String defPackageName,String defClassName) {
    if ((defPackageName != null && defPackageName.trim().length() > 1) && (defClassName != null && defClassName.trim().length() > 0)) {
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.MAIN");
        filter.addCategory("android.intent.category.HOME");
        filter.addCategory("android.intent.category.DEFAULT");

        Intent intent=new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        List list = new ArrayList();
        list = getPackageManager().queryIntentActivities(intent, 0);
        final int N = list.size();
        ComponentName[] set = new ComponentName[N];
        int bestMatch = 0;
        for (int i=0; i bestMatch) bestMatch = r.match;
        }
        ComponentName preActivity = new ComponentName(defPackageName, defClassName);
        getPackageManager().addPreferredActivity(filter, bestMatch, set,preActivity);
    }
}

onCreate 방법 에 호출 추가
protected void onCreate(Bundle savedInstanceState) {
    //++++++++++++
    boolean firstBoot = (Settings.System.getInt(getApplication().getContentResolver(),
                Settings.System.DEFAULT_HOME_SETTING_CHANGED, 0) == 0);
    if(firstBoot){
        String defPackageName = "com.panasonic.india.flexuihome";
        String defClassName = "com.panasonic.india.flexuihome.Launcher";
        setDefaultLauncher(defPackageName,defClassName);

        android.util.Log.i("deflauncher : ","deflauncher : PackageName = "+
            defPackageName+" ClassName = "+defClassName);
        Intent defIntent = new Intent();
        defIntent.setClassName(defPackageName, defClassName);
        defIntent.setAction("android.intent.action.MAIN");
        defIntent.addCategory("android.intent.category.HOME");
        defIntent.addCategory("android.intent.category.DEFAULT");
        startActivity(defIntent);
        Settings.System.putInt(getApplication().getContentResolver(),
                Settings.System.DEFAULT_HOME_SETTING_CHANGED,1);
        this.finish();
    }
    //++++++++++++
    // Use a specialized prompt when we're handling the 'Home' app startActivity()
    final int titleResource;
    final Intent intent = makeMyIntent();
    final Set categories = intent.getCategories();
    if (Intent.ACTION_MAIN.equals(intent.getAction())
            && categories != null
            && categories.size() == 1
            && categories.contains(Intent.CATEGORY_HOME)) {
        titleResource = com.android.internal.R.string.whichHomeApplication;
    } else {
        titleResource = com.android.internal.R.string.whichApplication;
    }

    onCreate(savedInstanceState, intent, getResources().getText(titleResource),
            null, null, true);
}

DEFAULT_HOME_SETTING_CHANGED 설정
core / java / android / provider / settings. java 의 public static final class System extends NameValueTable {} 에 추가
public static final String DEFAULT_HOME_SETTING_CHANGED = "default_home_setting_changed";
packages / SettingsProvider / res / values / defaults. xml 에 추가
0
packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
private void loadSystem Settings (SQLiteDatabase db) {} 에 추가
loadIntegerSetting(stmt, Settings.System.DEFAULT_HOME_SETTING_CHANGED, R.integer.default_launcher_value);

좋은 웹페이지 즐겨찾기