starta och stoppa broadcastreceiver

Diskussion i 'Frågor, support och diskussion' startad av Patlan, 21 jun 2012.

  1. Patlan

    Patlan Teen Droid Medlem

    Blev medlem:
    17 apr 2010
    Inlägg:
    383
    Mottagna gillanden:
    7

    MINA ENHETER

    Hej, jag har letat febrilt efter ett sätt att starta och stoppa en broadcastreceiver som tar emot sms när en specifik aktivitet inuti en app startar. Det jag vill är att inkommande sms bara ska tas emot när just den aktiviteten är aktiv.
    Jag har en klass ReceiveSMS som skickar upp en toast med texten i inkommande SMS, problemet är bara att den alltid gör det. Så, hur kan jag starta och stoppa det? Måste jag justera manifest-filens intent-filter??

    Kod:
    receiver android:name=".ReceiveSMS" 
    intent-filter
    action android:name="android.provider.Telephony.SMS_RECEIVED"
    /intent-filter
    /receiver
    
     
    Last edited: 21 jun 2012
  2. mikma

    mikma Adult Droid Medlem

    Blev medlem:
    5 dec 2010
    Inlägg:
    729
    Mottagna gillanden:
    81
    Telefon:
    Sony XZ2 Compact

    MINA ENHETER

    Telefon:
    Sony XZ2 Compact
    Ja, vill du bara ta emot broadcast när din aktivitet är aktiv så tar du bort deklarationen från manifestet och istället anropar registerReceiver i onResume och unregisterReceiver i onPause.
     
  3. Patlan

    Patlan Teen Droid Medlem

    Blev medlem:
    17 apr 2010
    Inlägg:
    383
    Mottagna gillanden:
    7

    MINA ENHETER

    Ok, jag prövade så här men det verkar inte funka. Den tar inte emot inkommande SMS alls nu.

    Kod:
    	@Override
    	protected void onStop() {
    		super.onStop();
    		
    		stopReceivingSMS();
    	}
    
    
    	@Override
    	protected void onResume() {
    		super.onResume();
    		
    		startReceiveSMS();
    		
    	}
    	
    	private void stopReceivingSMS() {
    		
    		unregisterReceiver(receiver);
    		
    		Log.i(TAG, "Stoppar broadcastingen");
    		
    	}
    	private void startReceiveSMS() {
    		
    		IntentFilter intentFilter = new IntentFilter(ACTION);
    		receiver = new ReceiveSMS();
    		registerReceiver(receiver, intentFilter);
    		
    		Log.i(TAG, "Startar broadcastingen " + ACTION );
    	}
    ACTION = paketnamn.ReceiveSMS

    I manifest-filen enbart:


    Kod:
            
    < receiver android:name=".ReceiveSMS" >
    < /receiver>
    
     
  4. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    1. ACTION ska vara "android.provider.Telephony.SMS_RECEIVED"
    2. Ta bort receiver helt från manifestet
    3. Använd onPause istället för onStop
    4. Glad Midsommar!
     
    Patlan gillar detta.
  5. Patlan

    Patlan Teen Droid Medlem

    Blev medlem:
    17 apr 2010
    Inlägg:
    383
    Mottagna gillanden:
    7

    MINA ENHETER

    System.out.println("TACK");