2016-07-21 10 views
0

У меня есть приложение, которое обновляется с новой версией, изменяя код версии. Обновление выполняется с внутренней стороны, а телефон обновляет apk, используя клиент OTA adb.Как получить трансляцию, когда мое приложение обновлено с новым кодом версии android

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

Я могу сделать это, используя пусковую установку, которая на самом деле получает пакет, измененный или удаленный связанный с ним действие, а затем запустит основное приложение. Затем приложение отправит статус обновления OTA в исходный код без какого-либо взаимодействия с пользователем. Вот пример кода. В пусковом манифесте приложения:

<receiver android:name=".receivers.PackageChangedReceiver"> 
      <intent-filter> 
       <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
       <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
       <data android:scheme="package"/> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </receiver> 

Вот приемник:

@Override 
    public void onReceive(Context context, Intent intent) { 
     String packageName=intent.getData().getEncodedSchemeSpecificPart(); 
     if(packageName.contains(context.getString("packagename"))) 
     context.startActivity(new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK)); 
    } 

Теперь мой вопрос, как я могу сделать то же самое, как и запуск основного приложения и отправить OTA обновить статус с помощью основного приложения только без запуска и взаимодействия с пользователем в приложении после обновления OTA?

+0

Я не понимаю ваш вопрос. Вы говорите, что уже делаете то, и тогда вы спрашиваете, как это сделать? Пожалуйста, объясните более подробно, что вы делаете, и что вы не делаете, но нуждаетесь в помощи. –

+0

@DavidWasser Да, я могу сделать это с помощью стороннего приложения, такого как приложение для запуска, которое фактически отвечает за получение статуса основного приложения, передает статус трансляции и отправляет его в конец. Мой вопрос: могу ли я сделать то же самое без помощи стороннего приложения. Использование только моего основного приложения. – 0xalihn

ответ

0

У вас может быть собственное приложение, поймающее трансляцию Intent, как приложение для запуска. Тогда вы можете делать то, что хотите. Создание в приложении к BroadcastReceiver и добавьте эти записи в манифесте:

<receiver android:name=".MyBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
     </intent-filter> 
    </receiver> 

Вам не нужно <category> или <data> теги и бессмысленно слушать PACKAGE_REMOVED, потому что, если ваше приложение будет удален, вы не получите все равно.

+0

Я не могу получить широковещательный приемник из своего приложения. Я реализовал это в своем приложении и установил его в устройство, а затем сначала удалю пакет (adb uninstall packagename) после установки apk (adb install apk), но после установки я не смог получить доступ к BroadcastReceiver. Это означает, что BroadcastReceiver не звонит. – 0xalihn

+0

Нет, если вы удалите и переустановите, это не сработает. Вы сказали в своем вопросе, что вы делаете «обновление» OTA. Я предположил, что вы ** обновляете существующее приложение **. Если ваше приложение будет удалено, а затем переустановлено, вы ничего не сможете сделать, потому что ваше приложение нужно будет запустить вручную сначала, прежде чем он сможет что-либо сделать. –

+0

Если вы не хотите использовать сторонний инструмент для управления этим, вы можете написать другое приложение самостоятельно. Это приложение будет установлено на устройстве, и оно будет следить за установками/удалениями приложений, и оно может автоматически запускать ваше приложение, когда оно будет установлено, и может автоматически обновлять ваш сервер (как и стороннее приложение). Однако это должно быть отдельное приложение. –