Our app is getting quite a few different SecurityException
reports from our crash report software. Here is a stacktrace of the crash:
java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@43fda840 (pid=17925) when registering receiver android.content.IIntentReceiver$Stub$Proxy@43fd9458 at android.os.Parcel.readException(Parcel.java:1431) at android.os.Parcel.readException(Parcel.java:1385) at android.app.ActivityManagerProxy.registerReceiver(ActivityManagerNative.java:2466) at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1717) at android.app.ContextImpl.registerReceiver(ContextImpl.java:1685) at android.app.ContextImpl.registerReceiver(ContextImpl.java:1679) at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:453) at com.google.android.gms.analytics.q.v(Unknown Source) at com.google.android.gms.analytics.r.cF(Unknown Source) at com.google.android.gms.analytics.r.cH(Unknown Source) at com.google.android.gms.analytics.s.cO(Unknown Source) at com.google.android.gms.analytics.s.cP(Unknown Source) at com.google.android.gms.analytics.s.d(Unknown Source) at com.google.android.gms.analytics.s$e.run(Unknown Source) at java.util.Timer$TimerImpl.run(Timer.java:284)
The stack trace is always the same, except the only thing that seems to change is android.app.ApplicationThreadProxy@41da9030 (pid=9103)
and android.content.IIntentReceiver$Stub$Proxy@41ee0688
have different numbers on them (is this thread id's or something?)
Now this exception seems to be linked to intent size (see the following links)
Is this the only cause? If so how is my code causing this when it seems to only come from google analytics
code? Am I using GA wrong? I don't seem to be doing much besides making a tracker.
EDIT
This is how I am creating my tracker. I have a singleton
tracker in my application object
Tracker appTracker; synchronized Tracker getTracker() { GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); if (appTracker == null) { appTracker = analytics.newTracker([some key]); appTracker.enableAdvertisingIdCollection(true); analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE); } return appTracker; }
Then in my BaseActivity I have the following code:
public void initAnalytics() { if (Global.TRACKING_ENABLED) { mTracker = app.getTracker(); } } public void sendCommerceData(Map<String, String> params) { mTracker.send(params); } public void sendTrackViewData(String _path) { mTracker.setScreenName(_path); mTracker.send(new HitBuilders.AppViewBuilder().build()); } public void sendEventData(String category, String action, String label, long value) { mTracker.send(new HitBuilders.EventBuilder() .setCategory(category) .setAction(action) .setLabel(label) .setValue(value).build()); }
EDIT 2
ok here is the use of sendCommerceData:
sendCommerceData(new HitBuilders.ItemBuilder() .setTransactionId(Integer.toString(order.orderId)) .setName(orderItem.tradeTitle) .setSku(orderItem.tradeId) .setCategory(orderItem.categoryFullname) .setPrice(price) .setQuantity(orderItem.quantity) .build());
u_u
It's a SecurityException means this is not happening because of our own function. (Mostly system code throw these exception).
and system uses (android.app.ApplicationThread) to register a broadcast.
Unless it is happening on all devices i can say it's because of bad GMS configuration (Google play service).
What you can do is wrap all analytics call with try catch (where you only catch Security exception).
I am not 100% sure but i will add more info after i try it my self.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With