Как проверить приложение на присутствие в маркетах и что дает эта информация?
Класс PackageManager может сказать нам имя пакета приложения, установившего пакет.
Для этого используется метод getPackageManager().getInstallerPackageName()
, который вернет строку.
Например, Play Маркет имеет com.google.market
или com.google.market
, Amazon App Store — com.amazon.venezia
, маркет от Samsung — com.sec.android.app.samsungapps
.
А вот приложения с F-Droid указывают не на него, а на com.google.android.packageinstaller
, как будто бы их установил сам пользователь.
Зная источник установки и имя пакета самого приложения, можно постучаться в маркеты по конкретным URL. Наличие программы в маркете — уже некоторый повод для самоуспокоения, все-таки их иногда чистят.
А вот если приложение было из маркета удалено, то это серьезный сигнал для беспокойства (его, конечно, могли удалить из-за какой-нибудь чепухи, вроде нарушения чужих авторских прав, но, скорее всего, это было что-то реально нехорошее).
Для получения URL приложения в Play Маркет и F-Droid используй строчки
1 2 |
<span class="typ">String</span><span class="pln"> playStoreUrl </span><span class="pun">=</span> <span class="str">"https://play.google.com/store/apps/details?id="</span> <span class="pun">+</span><span class="pln"> packageName</span><span class="pun">;</span> <span class="typ">String</span><span class="pln"> fdroidStoreUrl </span><span class="pun">=</span> <span class="str">"https://www.f-droid.org/packages/"</span> <span class="pun">+</span><span class="pln"> packageName</span><span class="pun">;</span> |
Аналогично можно проверять и остальные маркеты. Код простой проверки (запускай только в фоновых потоках, так как используется сеть):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="kwd">private</span> <span class="kwd">void</span><span class="pln"> checkPlayMarket</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> playStoreUrl</span><span class="pun">)</span> <span class="pun">{</span> <span class="kwd">try</span> <span class="pun">{</span><span class="pln"> URL url </span><span class="pun">=</span> <span class="kwd">new</span><span class="pln"> URL</span><span class="pun">(</span><span class="pln">playStoreUrl</span><span class="pun">);</span> <span class="typ">HttpURLConnection</span><span class="pln"> connection </span><span class="pun">=</span> <span class="pun">(</span><span class="typ">HttpURLConnection</span><span class="pun">)</span><span class="pln"> url</span><span class="pun">.</span><span class="pln">openConnection</span><span class="pun">();</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">setRequestMethod</span><span class="pun">(</span><span class="str">"GET"</span><span class="pun">);</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">connect</span><span class="pun">();</span> <span class="kwd">int</span><span class="pln"> code </span><span class="pun">=</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">getResponseCode</span><span class="pun">();</span> <span class="kwd">if</span> <span class="pun">(</span><span class="pln">code </span><span class="pun">==</span> <span class="lit">200</span><span class="pun">){</span> <span class="com">// Есть в маркете</span> <span class="pun">}</span> <span class="kwd">if</span> <span class="pun">(</span><span class="pln">code </span><span class="pun">==</span> <span class="lit">404</span><span class="pun">){</span> <span class="com">// Нет в маркете</span> <span class="pun">}</span><span class="pln"> connection</span><span class="pun">.</span><span class="pln">disconnect</span><span class="pun">();</span> <span class="pun">}</span> <span class="kwd">catch</span> <span class="pun">(</span><span class="typ">Exception</span><span class="pln"> e</span><span class="pun">)</span> <span class="pun">{</span> <span class="typ">Log</span><span class="pun">.</span><span class="pln">e</span><span class="pun">(</span><span class="str">"CheckStoreTask"</span><span class="pun">,</span><span class="pln"> e</span><span class="pun">.</span><span class="pln">toString</span><span class="pun">());</span> <span class="pun">}</span> <span class="pun">}</span> |