无法将活动作为参数传递给方法

时间:2012-05-13 22:51:40

标签: android android-activity android-notifications

所以这是交易。

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

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”是一个类级变量,所以不要担心。这段代码工作正常)。

3 个答案:

答案 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());
相关问题