如何在通知点击时调用非活动方法

8
我有一个Java类 MyClass,其中包含一个名为 callMethod 的方法。我希望在用户单击通知时调用此方法。
下面是我用来生成通知的代码:
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);
            }
        });
    }
}

以下是 MyClass 的实现:

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

请帮忙,我已经被卡住了一段时间了


尝试使用 MyClass.callMethod(),它会起作用的。你可以有一个 Util 类来处理一些类似这样的通用情况。 - Babajide Apata
@BabajideApata 我在哪里调用MyClass.callMethod()方法? - Ezio
看这一行代码 PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, new Intent(MainActivity.this, MyClass.class), PendingIntent.FLAG_UPDATE_CURRENT); 它的作用是调用我的类,所以在这个类里面,你可以立即调用你的方法。 - Babajide Apata
2个回答

11

你可以像这样做:

在创建要放入NotificationPendingIntent时:

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

现在,在MyClass.onCreate()中:

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

MyClass不是一个活动类,在MyClass中没有onCreate()方法。 - Ezio
那么,你不能在代码中这样做:PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, new Intent(MainActivity.this, MyClass.class), PendingIntent.FLAG_UPDATE_CURRENT); - David Wasser
2
点击“通知”会触发“Intent”。这就是全部。你需要有东西来接收那个“Intent”,并执行你想要完成的操作。只有 Android 组件(ActivityServiceBroadcastReceiver)能够接收一个“Intent”。因此,看起来你需要编写一个ActivityServiceBroadcastReceiver来接收这个“Intent”,然后调用MyClass.callMethod() - David Wasser

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接