Как проверить приложение на присутствие в маркетах и что дает эта информация?
Класс 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 |
[crayon-66d9578d21310506140186 inline="true" ]<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> |
[/crayon]
Аналогично можно проверять и остальные маркеты. Код простой проверки (запускай только в фоновых потоках, так как используется сеть):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[crayon-66d9578d21312705759587 inline="true" ]<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> |
[/crayon]