2017-01-10 11 views
-1

私はランチャーを微調整するために別の設定アクティビティを持つランチャーアプリケーションを作っています。最初のアクティビティの確認と、Androidの別のアクティビティの抑制

ここでは、ユーザーが最初に設定しない限り、ランチャーをホームボタンを押したときに表示するようにはしません(通知によってアプリがダウンロードされると、設定アクティビティ

だから、私はアプリケーションの最初の実行後まで実行されているから、私のランチャーの活性を抑制することができ、そうでない場合は、どのように活動の最初の実行を知っています。

PS:私は既にアプリケーションの最初の実行を実装する方法を知っています。

+0

ホームボタンを押しても表示されますが、セットアップアクティビティが最初に設定されていない場合は実行しますか?また、アプリがダウンロードされたときに通知を表示することはできません。アプリを実行するまでは何もできません。 –

+0

それはかなり簡単ではありませんか? [CATEGORY_HOME]インテントと[有効](https://developer.android.com/)でアクティビティを[無効にする](https://developer.android.com/guide/topics/manifest/activity-element.html#enabled) android/content/pm/PackageManager.html#setComponentEnabledSetting%28android.content.ComponentName、%20int、%20int%29)は、ユーザーがセットアップを行った後にのみ表示されます。 – ozbek

+0

@ozbekうーん、私にとっては、私はまだ新しいです。だから、最初の実行後に 'CATEGORY_HOME'をコードで有効にするには? –

答えて

3

これは、Android Studioの「新しいAndroid Studioプロジェクトの開始」テンプレートを使用して作成された「設定アクティビティ」プロジェクトに基づいています。プロジェクトが正常に作成されたら、新しいアクティビティクラス(現在のプロジェクトにランチャーアクティビティ)を追加します。この例では、単純な空のアクティビティです。

public class HomeScreenActivity extends AppCompatActivity { 
} 

そして、その活動のためにAndroidManifest.xmlのエントリを追加します。

<activity 
    android:name=".HomeScreenActivity" 
    android:enabled="false" 
    android:label="@string/app_name"> 
    <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> 

ペイ注意android:enabled="false"に、それはここでの重要な部分です。これにより、ランチャーのアクティビティはデフォルトで無効になります。ユーザーが設定プロセスを完了した後、その状態が変更されます。

この例では、単にユーザーのクリックに基づいてSwitchPreferenceを追加し、HomeScreenActivityの状態を変更しました。

private SwitchPreference prefEnableDisableHomeScreen; 
private PackageManager packageManager; 
private ComponentName homeScreenComponent; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.pref_general); 
    setHasOptionsMenu(true); 

    packageManager = getActivity().getPackageManager(); 
    homeScreenComponent = new ComponentName(getActivity().getApplicationContext(), 
      HomeScreenActivity.class); 

    prefEnableDisableHomeScreen = (SwitchPreference) findPreference("enable_disable_home_screen"); 
    prefEnableDisableHomeScreen.setChecked(getIsComponentEnabled(homeScreenComponent)); 

    prefEnableDisableHomeScreen.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object o) { 
      boolean previousState = prefEnableDisableHomeScreen.isChecked(); 
      setComponentEnabledSetting(homeScreenComponent, previousState 
        ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED 
        : PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 
      prefEnableDisableHomeScreen.setChecked(getIsComponentEnabled(homeScreenComponent)); 

      return false; 
     } 
    }); 
} 

private boolean getIsComponentEnabled(ComponentName componentName) { 
    int state = packageManager.getComponentEnabledSetting(componentName); 
    return PackageManager.COMPONENT_ENABLED_STATE_ENABLED == state; 
} 

private void setComponentEnabledSetting(ComponentName componentName, int newState) { 
    packageManager.setComponentEnabledSetting(componentName, newState, PackageManager.DONT_KILL_APP); 
} 

希望します。

関連する問題