Как заставить приложение всегда работать в своей собственной задаче? - PullRequest
1 голос
/ 11 июля 2011

Я думаю, что App Manager запускает мое приложение после установки неправильно.Он запускает мои приложения в своей задаче.Когда я нажимаю ДОМОЙ и нажимаю значок приложения, я запускаю вторую задачу с моим приложением.

Я проверил это.Я сделал два приложения App1, App2.В App2 есть два действия A и B. App1 запускает App2 самым простым способом.

Intent intent = new Intent(Intent.ACTION_RUN); 
intent.setComponent(new ComponentName("org.app2.test", "org.app2.test.Screen1"));

Тест 1. Запустите App1.Приложение 1 выполняет действие App2 A. Активность A выполняет действие B. Нажмите Дом.Нажмите значок App2.Вы можете увидеть действие App2 A. (Неверно. Нам нужно выполнить задачи с App2)

То, что я изменил код для запуска App2.

Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setComponent(new ComponentName("org.app2.test", "org.app2.test.Screen1"));

Тест 2. Запустите App1.Приложение 1 выполняет действие App2 A. Активность A выполняет действие B. Нажмите Дом.Нажмите значок App2.Вы можете увидеть действие App2 B. (ОК.)

Как изменить манифест App2 и заставить App2 всегда запускаться в своей собственной задаче?

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Screen1"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".Screen2">
            <intent-filter>
              <action android:name="org.app2.test.screen2" />
              <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
    </activity>

</application>

1 Ответ

1 голос
/ 12 июля 2011

Я обнаруживаю ситуацию первого запуска приложения и перезапускаю ее.

if (first_run) {
  Log.w(TAG, AppHelper.FIRST_RUN);      

  PendingIntent intent = PendingIntent.getActivity(this.getBaseContext(), 0, (new Intent(getIntent())).addCategory(Intent.CATEGORY_LAUNCHER), Intent.FLAG_ACTIVITY_NEW_TASK);

  AlarmManager mgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
  mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, intent);
  System.runFinalizersOnExit(true); 
  System.exit(2);

  return;
}
...