2016-05-21 15 views
0

Der Zweck meines Projekts ist es, eine SMS-Nachricht zu erhalten. Also, das Problem ist, wenn ich eine Nachricht erhalte, muss ich den Nachrichtenwert an meine Hauptklasse übergeben. Hier ist mein Setup.Übergabe von Wert an Hauptklasse mit BroadcastReceiver

Hauptklasse:

public class MainActivity extends AppCompatActivity implements LocationListener { 

LocationManager locationManager; 
String mprovider; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //some activity is going on here. 
} 

public void reply(final String smsMessage) { 
    TextView txtMessage = (TextView) findViewById(R.id.lblMessage); 
    txtMessage.setText("message: "+smsMessage); 
} 

SmsReceiver Klasse:

public class SmsReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent) 
{ 
    Bundle myBundle = intent.getExtras(); 
    SmsMessage [] messages = null; 
    String strMessage = ""; 

    if (myBundle != null) 
    { 
     Object [] pdus = (Object[]) myBundle.get("pdus"); 

     messages = new SmsMessage[pdus.length]; 

     for (int i = 0; i < messages.length; i++) 
     { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       String format = myBundle.getString("format"); 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format); 
      } 
      else { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 
      strMessage += "SMS From: " + messages[i].getOriginatingAddress(); 
      strMessage += " : "; 
      strMessage += messages[i].getMessageBody(); 
      strMessage += "\n"; 
     } 

     Log.e("SMS", strMessage); 
     Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); 
     MainActivity main = new MainActivity(); 
     main.reply(strMessage); 
    } 
} 
} 

Wie Sie sehen können. Ich deklariere die Hauptklasse und analysiere den Wert für die Methode der Hauptklasse.

MainActivity main = neu MainActivity(); main.reply (strMessage);

Ich glaube nicht, dass dies der richtige Weg ist. es funktioniert sowieso nicht

+0

Sie haben Recht. Du solltest keine neuen Aktivitäten wie diese machen. –

+0

Ok, ich bin froh zu wissen, dass ich falsch liege. Aber was ist der richtige Weg, dies zu tun? : D –

+0

Sie haben einen Empfänger, also müssen Sie eine Nachricht an ihn senden. Sie könnten auch in der Verwendung einer Bibliothek wie EventBus –

Antwort

0

Sie könnten eine Singleton-Instanz Ihrer Hauptaktivität machen. Oder leiten Sie Ihre Hauptaktivität an die SmsReceiver-Instanz weiter.

Singleton würde Art sein wie diese

public class MainActivity.... { 
    public static MainActivity instance; 

    public void onCreate.... { 
      instance = this 
    } 
} 

Dann könnten Sie es wie MainActivity.instance verweisen. Aber es wäre besser, nur Ihre Hauptaktivitäts-Instanz an den SMS-Empfänger zu übergeben.

+0

Ich kann mir keinen guten Grund vorstellen, jemals eine Singleton-Aktivität zu verwenden ... –