android - Managing LocalBroadcastManager when a class is not yet created -


i have basic level @ android, , still have problems understanding life cycle of apps. i'm doing test.

let's have app has 3 classes: mainactivity, class , class b.

class receives "external" intents. i've defined receiver in manifest , works well. now, want that, when class receives , intent, should send "local" intent using localbroadcastmanager. if register receiver on main activity class works (it receives local intent), know code registering receiver ok. however, if on class b, never arrives. normal because have never used/defined class b in place, so, since class b never executed in way receiver never gets registered.

now, here questions (please, correct me if i'm wrong, because i'm not sure i've understood it):

since don't know when external intent come, maybe main activity (or class b if it's defined activity, example) destroyed. however, intent arrive class because put receiver part in manifest , broadcast local intent. should class sure other class receives it? (specially if want receiver goes in class b) should class b singleton, sure 1 , 1 class b exists, , class can check , create if needed class b before sending intent? there better way this? maybe local broadcasts not thought used in cases (when receiver maybe doesn't exist)?

in short, want have class not in main activity , can able receive local broadcasted intents @ time, if app not actively used , android has destroyed/paused/etc it.

thanks help!

update: i'll put code can show i've want.

first, class externalreceiver (what called class a). class receives external intent , broadcasts local intent within app:

public class externalreceiver extends broadcastreceiver {     @override     public void onreceive(context context, intent intent) {         log.d("testapp","externalreceiver: i've received intent "+intent.getaction());         intent localintent = new intent("testintent");         localintent.putextra("text", "hello, i'm test");         localbroadcastmanager.getinstance(context).sendbroadcast(localintent);     } } 

then, mainactivity class. if uncomment registerreceiver, mainactivity correctly receive local intent , log content of "text". problem if activity destroyed, local intent wouldn't arrive here (i'd prefere if class receiver):

public class mainactivity extends activity {     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         log.d("testapp","mainactivity - oncreate()");         // if i'd registered receiver here, work long activity exists:         //localbroadcastmanager.getinstance(this).registerreceiver(localreceiver, new intentfilter("testintent"));     }      private broadcastreceiver localreceiver = new broadcastreceiver() {         @override         public void onreceive(context context, intent intent) {             log.d("testapp","mainactivity: i've received local intent text: "+intent.getstringextra("text"));         }     }; } 

now, localreceiver (the class i've called b before). want receive local intent here. since i've never used class (not in manifest , not in code) never arrive here, right never receive intent. i've extended activity too, haven't put in manifest. in fact, don't need activity, thought maybe because override oncreate. suggestions welcome how should define class:

public class localreceiver extends activity {     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         // register receiver.         localbroadcastmanager.getinstance(this).registerreceiver(localreceiver, new intentfilter("testintent"));     }      private broadcastreceiver localreceiver = new broadcastreceiver() {         @override         public void onreceive(context context, intent intent) {             log.d("testapp","localreceiver: i've received local intent text: "+intent.getstringextra("text"));         }     }; } 

finally manifest:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.testapp.localbroadcast"     android:versioncode="2"     android:versionname="@string/app_version" >      <uses-sdk         android:minsdkversion="21"         android:targetsdkversion="21" />      <application         android:allowbackup="true"         android:icon="@drawable/testapp"         android:label="@string/app_name"         android:theme="@style/apptheme" >          <activity             android:name="com.testapp.localbroadcast.mainactivity"             android:label="@string/app_name" >             <intent-filter>                 <action android:name="android.intent.action.main" />                 <category android:name="android.intent.category.launcher" />             </intent-filter>         </activity>          <receiver android:name="com.testapp.localbroadcast.externalreceiver" >             <intent-filter>                 <action android:name="com.testapp.localbroadcast.test" />             </intent-filter>         </receiver>     </application> </manifest> 

now, test everything, i'd send intent through adb:

adb shell broadcast -a com.testapp.localbroadcast.test -n com.testapp.localbroadcast/.externalreceiver 

what want:

  • have receiver on externalreceiver listens intent (com.testapp.localbroadcast.test in example). works now.
  • externalreceiver should broadcast local intent other class (localreceiver) within app.
  • that class (localreceiver) receives intent , (probably without updating ui).

my problem:

  • i want sure class receives local intent works after long time. example, if activity doesn't exists, externalreceiver should assure other class receives local intent. guess: make localreceiver activity , then, if needed, externalreceiver class should start if doesn't exist. still don't how externalreceiver works if mainactivity destroyed. shouldn't mainactivity created or resumed externalreceiver starts working?

i did previous version of within main activity , worked ok long existed. want separate code , make ready work if android has closed it. maybe haven't understood how kind of things works, suggestion welcome.

thanks again help!

you should put line of code can understand need. code of class receive broadcast. please put global class. , put code or exact requirement perfect solution.

public class alarmreceiver extends broadcastreceiver {      @override     public void onreceive(context context, intent intent) {       //boradcast local contents here     } } 

Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -