3

Ich habe eine Java-Klasse MyClass, die eine Methode namens callMethod enthält. Ich möchte diese Methode aufrufen, wenn der Benutzer auf die Benachrichtigung klicktSo rufen Sie eine Nicht-Aktivitätsmethode bei Benachrichtigung auf

Unten ist der Code ich die Meldung zu generieren verwendet

public class MainActivity extends AppCompatActivity { 

    Button button; 
    NotificationManager mNotifyMgr; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     button = (Button) findViewById(R.id.button); 
     mNotifyMgr = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, new Intent(MainActivity.this, MyClass.class), PendingIntent.FLAG_UPDATE_CURRENT); 
       Notification notification = 
        new NotificationCompat.Builder(MainActivity.this) 
          .setContentTitle("Notification") 
          .setSmallIcon(R.drawable.ic_launcher) 
          .setContentText("Downloaded") 
          .setContentIntent(pendingIntent) 
          .build(); 

       mNotifyMgr.notify(1,notification); 
      } 
     }); 
    } 
} 

und darunter ist die Umsetzung von MyClass

public class MyClass { 
    public void callMethod(){ 
     System.out.println("Notification clicked"); 
    } 
} 

Bitte helfen Sie, Ich bin seit einer Weile in diesem stecken

+0

versuchen MyClass.callMethod(), es wird funktionieren, können Sie habe eine Util-Klasse, um einige generische Fälle wie diese zu behandeln –

+0

@BabajideApata wo rufe ich die MyClass.callMethod() auf? – Ezio

+0

Blick auf diese Zeile PendingIntent pendingIntent = PendingIntent.getActivity (MainActivity.this, 0, neue Absicht (MainActivity.this, MyClass.class), PendingIntent.FLAG_UPDATE_CURRENT); was es tut, ist meine Klasse zu nennen, also innerhalb dieser Klasse, Sie kann Ihre Methode aufrufen, sofort startet die Klasse –

Antwort

1

Sie c Ould dies so etwas wie tun:

Wenn Ihr PendingIntent zu schaffen, in der Notification zu setzen:

Intent notificationIntent = new Intent(MainActivity.this, MyClass.class); 
notificationIntent.putExtra("fromNotification", true); 
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent, 
     PendingIntent.FLAG_UPDATE_CURRENT); 

nun in MyClass.onCreate():

if (getIntent().hasExtra("fromNotification")) { 
    callMethod(); 
} 
+0

MyClass ist keine Aktivitätsklasse, es gibt keine onCreate() -Methode in MyClass – Ezio

+0

Nun, Sie können dies nicht tun: 'PendingIntent PendingIntent = PendingIntent.getActivity (MainActivity.this, 0, neue Absicht (MainActivity.this, MyClass.class), PendingIntent.FLAG_UPDATE_CURRENT); ', die Sie in Ihrem Code veröffentlicht haben! –

+0

Ein Klick auf eine 'Notification' löst einen' Intent' aus. Das ist es. Sie benötigen etwas, um diese Absicht zu erhalten und die Aktion auszuführen, die Sie ausführen möchten. Nur Android-Komponenten ('Activity',' Service' oder 'BroadcastReceiver') können eine' Absicht' empfangen. Es sieht also so aus, als müssten Sie eine 'Activity',' Service' oder 'BroadcastReceiver' schreiben, die den' Intent' erhalten und dann 'MyClass.callMethod()' aufrufen. –

1
@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    //notification callbacks here in activity 
    //Call method here from non activity class. 
    Classname.methodName(); 
} 
Verwandte Themen