2013-09-23 5 views
3

Редактировать: Удалось решить проблему. Создал новый проект, очистил данные приложения перед его удалением, переустановил его и волшебным образом работал. Спасибо за помощь.Обнаружение установки приложения

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

Я установил его на свой телефон, и процесс и служба отображаются как работающие в настройках. Затем я загружаю приложение из магазина воспроизведения, проверяю лог-код, и в приложении ничего нет.

Любая помощь в том, где я ошибаюсь? Благодарю.

Edit:

После игры с ним еще немного, у меня есть новый пример тестового кода. Когда новый пакет установлен, метод onReceive не запускается. Однако, когда я тестировал, я добавил конструктор в класс BroadcastReceiver, и конструктор запускается каждый раз, когда установлен пакет. Таким образом, кажется, что он получает намерение, но журнал внутри onReceive никогда не распечатывается. Есть идеи?

public class InstallReceiver extends BroadcastReceiver { 

    public InstallReceiver() 
    { 
     //This log will display in the logcat 
     Log.d("InstallReceiver", "InstallReceiver constructor called."); 
    } 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //This log never displays if the constructor is in or commented out 
     Log.d("InstallReceiver", "Install detected."); 
    } 

} 

<receiver android:name=".InstallReceiver"> 
      <intent-filter > 
      <category android:name="android.intent.category.DEFAULT" /> 
      <action android:name="android.intent.action.PACKAGE_ADDED" /> 
      <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
      <action android:name="android.intent.action.PACKAGE_INSTALL" /> 
      <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
      <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
      <data android:scheme="package" /> 
      </intent-filter> 
     </receiver> 

ответ

-1

AFAIK, это невозможно в Android по причинам конфиденциальности. Не существует трансляции, в которой говорится, что приложение установлено.

+2

Если только Я неправильно понимаю документацию, вот она: http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED – Lucas

1

Включите это также в

<receiver android:name=".InstallReceiver"> 
    <intent-filter > 
     <action android:name="android.intent.action.PACKAGE_ADDED"/> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</receiver> 

Все остальное, что вы сделали, кажется правильным.

Единственная другая возможность заключается в том, что prijupaul говорит, что по соображениям безопасности эта трансляция может не работать больше.

+0

Я тоже это пробовал, и я до сих пор не могу заставить его работать. Я думаю, что он все еще работает в системе. У меня есть антивирусные программы на моем телефоне, которые запускаются при загрузке и установке нового приложения. – Lucas

0

с сайта developer.android.com ref. - «Обратите внимание, что недавно установленный пакет не получает эту трансляцию». - поэтому вы не можете обнаружить свою собственную установку пакета. он должен обнаруживать другие установки пакетов.

0

Documentation говорит: «Broadcast Действие: Новый пакет приложение было установлено на устройстве данных содержит имя пакета Обратите внимание, что вновь установленный пакет не получает эту передачу...»

+1

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

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