[aerogear-dev] Android push issue?
Marc Sluiter
marc at slintes.net
Mon Jul 29 10:51:22 EDT 2013
ok, thanks for the confirmation!
Marc
----- Nachricht von supittma at redhat.com ---------
Datum: Mon, 29 Jul 2013 10:18:30 -0400
> On 07/27/2013 09:01 AM, Marc Sluiter wrote:
>> Hi all,
>>
>> I had a further look into Android push, and there is a thing I
>> don't understand,
>> maybe there is an issue:
>>
>> In Registrar.onPostExecute() there are these lines:
>>
>> ComponentName component = new ComponentName(context,
>> AGPushMessageReceiver.class);
>> int status =
>> context.getPackageManager().getComponentEnabledSetting(component);
>> if (status == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
>> // register AGPushMessageReceiver
>> }
>>
>> What should this code do? Should it check if a receiver is
>> registered already?
> This code is leftover from an experiment in being able to set the
> Broadcast receiver programatically and should probably be excised with
> fire for the reasons you listed.
>> If yes, the problem with this is, that the if statement is always true,
>> regardless of whether there is a receiver registered in the
>> manifest or not. So
>> it registers a second one, if there is already one in the manifest.
>> Tested by
>> setting a breakpoint to the receivers onReceive() method, it's
>> called twice for
>> each notification.
>>
>> An alternative way to check if a receiver is registered is this:
>
>>
>> String action = "com.google.android.c2dm.intent.RECEIVE";
>> Intent intent = new Intent(action);
>> List<ResolveInfo> resolveInfos =
>> context.getPackageManager().queryBroadcastReceivers(intent,
>> PackageManager.GET_INTENT_FILTERS);
>> boolean isRegistered = false;
>> String receiverName = AGPushMessageReceiver.class.getName();
>> for(ResolveInfo resolveInfo : resolveInfos){
>> if(resolveInfo.activityInfo.name.equals(receiverName)){
>> isRegistered = true;
>> break;
>> }
>> }
>> if(!isRegistered){
>> // register AGPushMessageReceiver
>> }
>>
>> I can send a PR if you want to.
>>
>>
>> Furthermore I'm not sure if it really makes sense to register a
>> BroadcastReceiver for push notifications programmatically. The
>> reason is, that
>> this receiver is tied to the lifecycle of the app. That means after
>> a reboot no
>> messages are received until the app is started, and when Android
>> destroys the
>> app after some inactive time, no messages will be received anymore
>> too. See the
>> note in
>> https://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver,
>> android.content.IntentFilter):
>> "..the lifetime of such a registered BroadcastReceiver is tied to the object
>> that registered it."
>> I confirmed this by commenting out the receiver in the PushEE demo
>> app manifest.
>>
>> What do you think?
> I think you are correct. The code needs to go.
>>
>> Regards,
>>
>> Marc
>> _______________________________________________
>> aerogear-dev mailing list
>> aerogear-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
----- Ende der Nachricht von supittma at redhat.com -----
More information about the aerogear-dev
mailing list