1

最初の実行時にホーム画面にショートカットを追加するための小さなコードがあります。

    Intent shortcutIntent = new Intent(getApplicationContext(),
            SFlashActivity.class);

    shortcutIntent.setAction(Intent.ACTION_MAIN);

    Intent addIntent = new Intent();
    addIntent
            .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "New App");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
            Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                    R.drawable.ic_launcher));

    addIntent
            .setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    addIntent
            .putExtra("duplicate", false);
    getApplicationContext().sendBroadcast(addIntent);

しかし、上記のコードでは、アプリが実行されていても、アプリは常にスプラッシュ画面を開始します。では、ホーム画面のショートカットをトップアクティビティに再開するにはどうすればよいですか。インストール時にGoogle Playによって作成されたアプリのショートカットは、常にトップアクティビティを再開することに気付きました。

ありがとうございます !

4

3 に答える 3

2

isTaskRoot() メソッドを使用する メイン アクティビティの OnCreate() に次のコード スニペットを入力します。次に例を示します。


 @Override public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setContentView(R.layout.splashscreen);              
        if(!isTaskRoot()){
            finish();
            return; 
        }
 }

ここで解決策を見つけました:

于 2014-04-29T11:53:08.710 に答える
1

ホーム画面のアイコンから起動すると、アプリケーションが既に実行されていない限り、Android は常にandroid.intent.action.MAIN内のフィルターを使用してアクティビティを開始しますAndroidManifest.xml(その場合、明らかにスタックの一番上にアクティビティが復元されます)。

あなたが説明したことを達成するには、最後の可視アクティビティを単純に保存し、設定に従って最後のアクティビティを開始SharedPreferencesするDispatcherアクティビティを作成します。

したがって、設定にアクティビティが存在する場合は、そのアクティビティを開始するか、SplashScreen を開始します。

自動的に再開したいすべてのアクティビティで:

@Override
protected void onPause() {
    super.onPause();

    SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
    Editor editor = prefs.edit();
    editor.putString("lastActivity", getClass().getName());
    editor.commit();
}

そして、次のようなDispatcherアクティビティ:

public class Dispatcher extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Class<?> activityClass;

        try {
            SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
            activityClass = Class.forName(
                prefs.getString("lastActivity", SplashScreen.class.getName()));
        } catch(ClassNotFoundException ex) {
            activityClass = SplashScreen.class;
        }


        startActivity(new Intent(this, activityClass));
    }
}

備考

  • onPauseオーバーライドの基本クラスを作成できます
  • Dispatcherアクティビティは明らかにandroid.intent.action.MAINアクションである必要があります

参照: -再起動時に Android アプリを最後に開いたアクティビティに戻す方法は?

于 2013-06-12T06:08:36.550 に答える