2015-10-24 2 views
1

Недавно я добавил возможность моего приложения проверять наличие обновлений на нашем локальном сервере (это приложение не публикуется в магазине Google Play. Оно будет использоваться внутри, и нет Интернета где он будет использоваться. Не спрашивайте. Вот как это :)). Я отслеживаю обновления, проверяя определенную таблицу на SQL Server, и если версия моего приложения ниже, чем указано в этой таблице, я загружаю новый APK с внутреннего веб-сайта (только LAN), а затем устанавливаю APK. У меня также есть другое приложение в устройстве, которое прослушивает трансляции PACKAGE_ADDED. Я могу захватить трансляцию успешно.Запретить запуск приложения на двух экземплярах

Проблема заключается в том, что после установки широковещательный приемник запускает приложение, вызывая следующее.

public class PackageInstalledBroadcastReceiver extends BroadcastReceiver { 
private final String MY_PACKAGE_NAME = "com.company.packagename"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) { 
     String packageName = intent.getData().getSchemeSpecificPart(); 
     if (packageName.equalsIgnoreCase(MY_PACKAGE_NAME)) {         
      Intent i = new Intent(); 
      i.setClassName(MY_PACKAGE_NAME, MY_PACKAGE_NAME + ".LoginActivity"); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 
     } 
    } 
} 

} 

Но приложение должно занять долгое время. Пользователь может подумать, что ничего не происходит, поэтому он может запустить приложение вручную, щелкнув значок приложения. Если пользователь нажимает значок приложения, приложение запускается немедленно. Через некоторое время также открывается активность, которую запускает широковещательный приемник. Итак, теперь я получаю два экземпляра моего приложения в одной активности (LoginActivity). Я могу сказать, что это так, потому что, если я нажму кнопку Back на устройстве из LoginActivity, я все равно вернусь к другому LoginActivity, и если я снова нажму клавишу Back, я окажусь на рабочем столе устройства.

+0

Если вы транслируете намерение открыть свое приложение LoginActivity, то ваше открытие действительно или вам нужно щелкнуть значок приложения, чтобы открыть приложение. –

+0

Активность фактически открывается, она просто занимает около 15 секунд, чтобы открыть после установки обновления –

+0

Пробовал ли вы с другими устройствами, а также –

ответ

0

У вас есть две проблемы в вашем вопросе:

Кулак, почему ваш BroadcastReceiver занять много времени, чтобы начать вашу деятельность.

У этого недостаточно информации для этого.

Второе, что вы хотите сделать своей деятельностью, имеет один экземпляр.

Android обеспечивают способ сделать это:

  • Шаг один: Посетите приложение androidmanifest файла
  • Шаг два: Найдите декларацию активности.
  • Шаг там: Добавьте следующее свойство android:launchMode = "singleInstance"

The reference here:

P/s: Если бы вы могли представить мою некоторые больше информации о вашей проблеме кулака. Пожалуйста, создайте новый вопрос. Надеюсь, вы разрешите это.

+0

. Предложение по 2-й проблеме не работает. Функция LoginActivity не открывается, если пользователь все еще находится в LoginActivity. Но если пользователь уже вошел в систему, он/она будет в MainActivity, так как больше нет экземпляра LoginActivity, создается новый экземпляр. –

Смежные вопросы