Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung


Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!

Service Problem

Das Thema "Service Problem" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 25.01.2010, 19:00   #1 (permalink)
Neuer Benutzer

Registriert seit: 30.11.2009
Beiträge: 12
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Service Problem

Hallo alle zusammen,

Ich bin noch recht neu in der Android-Programmierung und stehe nun vor einem ersten (schier unlösbarem) Problem:

Ich habe ein Primzahlen-Berechnungs-App geschrieben (Android 1.6):
Der Berechnungsintervall wird in 2 EditText-Views eingetragen und durch das drücken eines Buttons wird ein Service gestartet, der die Primzahlen berechnet und sie einzeln an die Hauptaktivität sendet. Dort werden sie in ein TextView eingetragen. Sobald der Service fertig ist, erscheint eine Notification. Wenn man darauf klickt, soll wieder die Hauptaktivität mit den berechneten Primzahlen erscheinen.
Und hier liegt das Problem: alle Views sind nach dem klicken auf die Notification wieder leer.
Gibt es eine Möglichkeit so einen Fall zu handeln?

Eine Idee von mir wäre einen Intent auf die aktuelle Instanz der Hauptaktivität zu erzeugen, aber ich habe keinen Plan wie ich daran komme.

Hauptaktivität:
Code:
public class MeinActivity extends Activity {
    private EditText txtVon;
    private EditText txtBis;
    private Button btnStart;
    private TextView txtView;
    
    //Keys
    public static final String NUM_VON = "NUM_VON";
    public static final String NUM_BIS = "NUM_BIS";
    
    private Intent intentService;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        txtVon = (EditText) findViewById(R.id.txtVon);
        
        txtBis = (EditText) findViewById(R.id.txtBis);
        
        txtView = (TextView) findViewById(R.id.txtAusgabe);
        
        btnStart = (Button) findViewById(R.id.btnStart);
        btnStart.setOnClickListener(new BtnStartClickListener());
        System.out.println("registering...");
        intentService  = new Intent(MeinActivity.this,PrimBerechner.class);
        registerReceiver(new primBroadcastReceiver(),new IntentFilter(PrimBerechner.PRIM_ACTION));
    }
    
    public class primBroadcastReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			if(intent.getAction().equals(PrimBerechner.PRIM_ACTION) ) {
				Bundle b = intent.getExtras();
				txtView.append(b.getInt("PRIM")+"\n");
			}
		}    	
    }    
    
    public class BtnStartClickListener implements OnClickListener {
		@Override
		public void onClick(View v) {
			if(v.equals(btnStart)) {
				if(((Button)v).getText().toString().equals("Start")) {
					
					//Service starten
					intentService.putExtra(MeinActivity.NUM_VON, Integer.parseInt(txtVon.getText().toString()));
					intentService.putExtra(MeinActivity.NUM_BIS, Integer.parseInt(txtBis.getText().toString()));
					
					startService(intentService);
					
					btnStart.setText("Stop");
				}
				else {
					txtView.append("Berechnung abgebrochen");
					Intent i = new Intent(MeinActivity.this,PrimBerechner.class);
					stopService(i);
					btnStart.setText("Start");
				}
			}
		}
    	
    }
}
Service:
Code:
public class PrimBerechner extends Service {
	private int von;
	private int bis;
	
	private String zahlen = "";
	
	//Intent key 
	public static final String PRIM_ACTION = "PRIM_ACTION";
	
	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}
	
	public void onStart(Intent intent, int ID) {
		super.onStart(intent, ID);
		
		Bundle b = intent.getExtras();
		this.von = b.getInt(MeinActivity.NUM_VON);
		this.bis = b.getInt(MeinActivity.NUM_BIS);
		
		Thread t = new Thread(new Rechner());
		t.start();
	}	

	public class Rechner implements Runnable {
		@Override
		public void run() {
			if (von % 2 == 0)
				von++;
					
			int teiler;
			int y;
			
			Intent i = new Intent(PRIM_ACTION);
					
			while (von <= bis)
			{
				teiler = 2;
				y = 0;
						
				while (teiler < von)
				{
					if ( von % teiler == 0 )
						y = 1;
					teiler++; 
				}
				
				if ( y == 0 ){
					//Broadcast senden
					i.putExtra("PRIM", von);
					sendBroadcast(i);
					
					zahlen += von + "\n";
				}			
				von += 2;
			}
			
			NotificationManager notiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
			Notification noti = new Notification(R.drawable.sieben,"Primzahlberechnung abgeschlossen",System.currentTimeMillis());
			
			noti.ledARGB = Color.BLUE;
			noti.ledOffMS = 1000;
			noti.ledOnMS = 2000;
			noti.flags = Notification.FLAG_SHOW_LIGHTS;
			
			Intent intent = new Intent(PrimBerechner.this,MeinActivity.class);
			intent.putExtra("ZAHLEN", zahlen);
			
			PendingIntent penIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
			
			noti.setLatestEventInfo(getApplicationContext(), "Primzahlberechner", "Ihre Primzahlberechnung ist abgeschlossen", penIntent);
			notiManager.notify(1, noti);
		}
		
	}
}
Bitte um Hilfe
Mfg Basti
Basti18 ist offline   Mit Zitat antworten
Alt 25.01.2010, 20:40   #2 (permalink)
Neuer Benutzer

Registriert seit: 30.11.2009
Beiträge: 12
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Service Problem

Das Problem ist gelöst:

Man muss das Atribut "android:launchMode" der Activity im Manifest als "singleInstance" festlegen.

Code:
<activity android:name=".MainActivity"
             android:label="@string/app_name"
             android:launchMode="singleInstance"
             >
</activity>

Geändert von Basti18 (25.01.2010 um 20:41 Uhr) Grund: Schreibfehler
Basti18 ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
G1 Service Manual Unu$ual T-Mobile G1 Forum 11 30.12.2010 15:35
background service swordi Android App Entwicklung 11 23.04.2010 10:23
Remote Service azzuro Android App Entwicklung 10 16.11.2009 13:38
IM-Service in Cyanogen loswerden? Hellek Root / Hacking / Modding für T-Mobile G1 3 01.11.2009 20:11
G1 Root Service NRW Sonnenschein Root / Hacking / Modding für T-Mobile G1 19 04.05.2009 06:42




Du liest gerade: "Service Problem" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.