2

所以这是交易。

我创建了一个用户定义的类。它包含一个返回通知对象的方法。现在我希望这种方法有点灵活。就像传递当用户单击通知栏中的通知时将打开的活动一样。这是方法

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;
}

我希望能够将活动作为参数传递给 this 而不是

HomeScreen.class

在上面的意图定义中使用(用于为此类的用户(或其他开发人员)提供额外的控制,以选择单击通知时要打开的活动)。我尝试使用 Activity 作为此方法的参数之一,但是每当我尝试在调用此方法(如“Activity2”或“Activity2.this”)时传递另一个活动时,它会给我错误提示:

No enclosing instance of the type Activity2 is accessible in scope

是否有任何解决方法或任何方法将活动作为参数传递。或者我应该根据 NotificationID 区分它们。

欢迎在这方面提供任何帮助或对上述代码进行任何更正。(“context”是一个类级别的变量,所以不用担心。这段代码工作正常)。

4

3 回答 3

3

的类型HomeScreen.classClass。因此,您可以传递 a 的实例Class来指示下一个活动。例如(为便于阅读而格式化):

public Notification getUserNotificationObject(
    String status,
    String message,
    String tickerText,
    boolean isOngoingEvent,
    Class nextActivityClass) {

并致电:

getUserNotificationObject(..., HomeScreen.class)

不过,更灵活的方法可能是将 an 传递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)
于 2012-05-13T22:56:54.420 回答
0

没有必要通过Activity。您可以轻松地传递 a Context,然后将其转换为Activity如下所示:

public class SomeClass {
    public SomeClass(Context context){

        // using context as activity
        Window win = ((Activity) context).getWindow();

        // your code
    }
}

希望你觉得它有用!

于 2015-04-18T13:45:08.147 回答
-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());
于 2014-06-23T11:07:04.847 回答