Привет, у меня такой вопрос: Я зарегестрировал ресивер через манифест Код | <receiver android:name="com.my.company.InstallReciever" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> </application>
|
Должен ли я регестриовать этот ресивер при запуске приложения? registerReceiver И еще вопрос как он создается? может ли быть создан вне приложения системой или нет код ресивера выглядит так Код | package com.my.company;
import android.os.Bundle; import android.content.*; import android.util.Log;
import org.json.JSONObject; import org.json.JSONException;
import java.util.Map; import java.util.HashMap; import java.net.URLDecoder;
import java.io.UnsupportedEncodingException;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences;
public class InstallReciever extends BroadcastReceiver {
private static String TAG = "InstallReciever"; public final static String PREFS_FILE_NAME = "ReferralParamsFile"; private final static String[] EXPECTED_PARAMETERS = { "utm_source", "utm_medium", "utm_term", "utm_content", "utm_campaign" }; public void onReceive(Context context, Intent intent) { Log.i(TAG, "onReceive"); // Workaround for Android security issue: http://code.google.com/p/android/issues/detail?id=16006 try { final Bundle extras = intent.getExtras(); if (extras != null) { extras.containsKey(null); } } catch (final Exception e) { return; }
Map<String, String> referralParams = new HashMap<String, String>();
// Return if this is not the right intent. if (! intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) return;
String referrer = intent.getStringExtra("referrer"); if( referrer == null || referrer.length() == 0) return;
try { // Remove any url encoding referrer = URLDecoder.decode(referrer, "x-www-form-urlencoded"); } catch (UnsupportedEncodingException e) { return; }
// Parse the query string, extracting the relevant data String[] params = referrer.split("&"); for (String param : params) { String[] pair = param.split("="); referralParams.put(pair[0], pair[1]); }
InstallReciever.storeReferralParams(context, referralParams); } public static void storeReferralParams(Context context, Map<String, String> params) { SharedPreferences storage = context.getSharedPreferences(InstallReciever.PREFS_FILE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = storage.edit(); try { JSONObject jsonObj = new JSONObject("{}"); for(String key : InstallReciever.EXPECTED_PARAMETERS) { String value = params.get(key); if(value != null) { jsonObj.put(key, value); //editor.putString(key, value); } } editor.putString("data", jsonObj.toString()); //editor.putBoolean("callback", false); editor.commit(); Log.i(TAG, "Writed data: " + jsonObj.toString()); } catch(JSONException e) { Log.i(TAG, "onRecieve Error"); e.printStackTrace(); } } }
|
пытаюсь тестировать через adb, но в логе сообщений не появляется. Это сообщение отредактировал(а) Burka - 11.11.2014, 18:07
--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
|