所以这是交易。
我创建了一个用户定义的类。它包含一个返回通知对象的方法。现在我希望这种方法有点灵活。就像传递用户点击通知栏中的通知时打开的活动一样。这是方法
public Notification getUserNotificationObject(String status, String message, String tickerText, boolean isOngoingEvent){
Notification notification = new Notification(R.drawable.image, tickerText, System.currentTimeMillis());
long vibInterval = (long) context.getResources().getInteger(R.integer.vibrateInterval);
notification.vibrate = new long[] {vibInterval, vibInterval, vibInterval, vibInterval, vibInterval};
Intent notifyIntent = new Intent(context, HomeScreen.class);
CharSequence contentTitle = "Title";
CharSequence contentText = status + "-" + message;
notification.setLatestEventInfo(context, contentTitle, contentText, PendingIntent.getActivity(context, 0, notifyIntent, PendingIntent.FLAG_CANCEL_CURRENT));
notification.ledARGB = Color.argb(100, 0, 254, 0);
notification.ledOnMS = 500;
notification.ledOffMS = 500;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
if(isOngoingEvent){
notification.flags |= Notification.FLAG_ONGOING_EVENT;
}
return notification;
}
我希望能够将活动作为参数传递给此而不是
HomeScreen.class
上面用于意图定义的(用于为此类(或其他开发人员)的用户提供额外控制,以选择在单击通知时打开哪个活动)。我尝试使用Activity作为此方法的参数之一,但每当我尝试在调用此方法时传递另一个活动,如“Activity2”或“Activity2.this”时,它会给出错误说:
No enclosing instance of the type Activity2 is accessible in scope
是否有任何解决方法可以将此活动或任何方式作为参数传递。或者我应该根据NotificationID区分它们。
欢迎提供此方面的任何帮助或上述代码中的任何更正。 (“context”是一个类级变量,所以不要担心。这段代码工作正常)。
答案 0 :(得分:3)
HomeScreen.class
的类型为Class
。因此,您可以传递Class
的实例来指示下一个活动。例如(格式化为可读性):
public Notification getUserNotificationObject(
String status,
String message,
String tickerText,
boolean isOngoingEvent,
Class nextActivityClass) {
并致电:
getUserNotificationObject(..., HomeScreen.class)
更灵活的方法可能是将Intent
传递给您的函数。这样,调用者可以按照他们想要的方式创建Intent
,并允许他们在需要时向intent添加其他数据。在函数内部创建new Intent
不允许这种灵活性。
public Notification getUserNotificationObject(
String status,
String message,
String tickerText,
boolean isOngoingEvent,
Intent nextIntent) {
并致电:
Intent intent = new Intent(context, HomeScreen.class);
getUserNotificationObject(..., intent)
答案 1 :(得分:0)
没有必要通过Activity
。您可以轻松传递Context
,然后将其投放到Activity
,如下所示:
public class SomeClass {
public SomeClass(Context context){
// using context as activity
Window win = ((Activity) context).getWindow();
// your code
}
}
希望你觉得它很有用!
答案 2 :(得分:-1)
只需创建一个活动对象/实例,例如 new YourActivity()。
public static void Redirect(Context context,Activity page) {
..... //code
context.startActivity(new Intent(context,page.getClass()));
((Activity) context).finish();
}
并将此方法用作
Redirect(Registration.this, new YourActivity());