Methode aus BroadcastReceiver starten

  • Antworten:4
  • Bentwortet
Urban_Android
  • Forum-Beiträge: 16

12.09.2013, 22:55:32 via App

Hallo, ich möchte diese Methode aus meiner MainActivity in der BroadcastReceiver ausführen bzw. starten lassen. Wie bekomme ich das hin? Hier der Code:
void AllOut() throws IOException
{
String msg = String.format("%c%03d;%03d;%03d;", 0x0F, 0, 0, 0);
mmOutputStream.write(msg.getBytes());
}
Geht das per Intent?

— geändert am 12.09.2013, 23:03:47

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

13.09.2013, 01:17:50 via Website

Sehr kurze sachen kannst du in der onReceive ausführen lassen...

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Urban_Android
  • Forum-Beiträge: 16

13.09.2013, 01:51:07 via App

Also meine onReceive sieht so aus.

public void onReceive(Context arg0, Intent arg1) {

Toast.makeText(arg0, "Your Time is up!!!!!", Toast.LENGTH_LONG).show();
Vibrator vibrator = (Vibrator) arg0.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(2000);
Log.d("AlarmReceiver", "AlarmReceiver End");
AllOut ();
}
Es wird auch alles ausgeführt nur eben AllOut(); nicht, da das in der MainActivity steht und somit nicht im Broadcaster zur Verfügung steht.

Antworten
Urban_Android
  • Forum-Beiträge: 16

15.09.2013, 18:02:22 via Website

Also ich habe jetzt versucht es so aus meiner AlarmReceiver.java zu übergeben geht aber nicht.
Wie müsste den in etwa ein Intent in meinem Fall aussehen?

AlarmReceiver.java
1public class AlarmReceiver extends BroadcastReceiver {
2 @Override
3 public void onReceive(Context arg0, Intent arg1) {
4
5 Toast.makeText(arg0, "Your Time is up!!!!!", Toast.LENGTH_LONG).show();
6 Vibrator vibrator = (Vibrator) arg0.getSystemService(Context.VIBRATOR_SERVICE);
7 vibrator.vibrate(2000);
8 Log.d("AlarmReceiver", "Start");
9 String AllOut = String.format("%c%03d;%03d;%03d;", 0x0F, 0, 0, 0);
10 SendAllOut(arg0, AllOut);

11
12 }
13 private void SendAllOut(Context arg0, String AllOut) {
14 Log.d("AlarmReceiver_AllOut_intent","Start");
15 Intent intent=new Intent("MainActivity.class");
16 intent.putExtra("Message", AllOut);
17 arg0.startActivity(intent);
18 Log.d("SendallOut","gesendet");

19 }
20}


MainActivity.java

1private void setAlarm(Calendar targetCal) {
2
3 Alarm.setText("Alarm is set at \n" + targetCal.getTime());
4 Toast.makeText(MainActivity.this, "Alarm is set at " + targetCal.getTime(),
5 Toast.LENGTH_LONG).show();
6 Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
7 PendingIntent pendingIntent = PendingIntent.getBroadcast(
8 getBaseContext(), RQS_1, intent, 0);
9 AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
10 alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
11 pendingIntent);
12 Log.d("MainActivity_msg_String","Start");
13 String msg=getIntent().getStringExtra("Message");

14 }

— geändert am 15.09.2013, 18:05:18

Antworten
Urban_Android
  • Forum-Beiträge: 16

18.09.2013, 16:42:28 via Website

Also hab die Lösung mit etwas Nachdenken gefunden, ist manchmal gar nicht so schwer. B)

Musste nur die Methode AllOut() in meiner MainActivity.java von void auf public static void setzen, und schon ging es.
Vorher:
1void AllOut() throws IOException
2 {
3 String msgOut = String.format("%c%03d;%03d;%03d;", 0x0F, 0, 0, 0); // 0x0A = Color set command
4 mmOutputStream.write(msgOut.getBytes());
5
6 }

Nachher:
1public static void AllOut() throws IOException
2 {
3 String msgOut = String.format("%c%03d;%03d;%03d;", 0x0F, 0, 0, 0); // 0x0A = Color set command
4 mmOutputStream.write(msgOut.getBytes());
5
6 }

Eingebunden wird das ganze dann so in der AlarmReceiver.java
1@Override
2 public void onReceive(Context arg0, Intent arg1) {
3
4 Toast.makeText(arg0, "Your Time is up!!!!!", Toast.LENGTH_LONG).show();
5 Vibrator vibrator = (Vibrator) arg0.getSystemService(Context.VIBRATOR_SERVICE);
6 vibrator.vibrate(2000);
7 Log.d("AlarmReceiver", "Start");
8 try {
9 MainActivity.AllOut();
10 } catch (IOException e) {
11 // TODO Auto-generated catch block
12 e.printStackTrace();
13 }

14 }

Antworten