1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. Basti18, 25.01.2010 #1
    Basti18

    Basti18 Threadstarter Neuer Benutzer

    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. :eek:
    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.:confused:

    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
     
  2. Basti18, 25.01.2010 #2
    Basti18

    Basti18 Threadstarter Neuer Benutzer

    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>
    
     
    Zuletzt bearbeitet: 25.01.2010
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Problem mit variable.setText (für TextView) Android App Entwicklung 25.10.2018
MIT AppInventor App erstellen um PDFs zu öffnen, problem Android App Entwicklung 10.10.2018
Problem mit for-Schleife, delay und Margins Android App Entwicklung 08.10.2018
Detektieren ob der Anwendungseigene Service läuft Android App Entwicklung 23.05.2018
Service stoppt wenn App geschlossen wird Android App Entwicklung 16.05.2018
Problem mit startActivityForResult() Android App Entwicklung 25.01.2018
Du betrachtest das Thema "Service Problem" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.