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

これで、アクティビティをパラメータとして渡すのではなく、渡すことができるようにしたい

HomeScreen.class

上記のインテント定義で使用されます(通知がクリックされたときに開くアクティビティを選択するために、このクラスのユーザー(または他の開発者)に追加の制御を与えるため)。このメソッドのパラメーターの1つとしてActivityを使用しようとしましたが、「Activity2」や「Activity2.this」などのこのメソッドを呼び出しているときに別のアクティビティを渡そうとすると、次のようなエラーが発生します。

No enclosing instance of the type Activity2 is accessible in scope

これまたはアクティビティをパラメータとして渡す方法の回避策はありますか?または、NotificationIDに基づいてそれらを区別する必要があります。

この点に関するヘルプや上記のコードの修正は大歓迎です。(「コンテキスト」はクラスレベルの変数なので、心配する必要はありません。このコードは正常に機能しています)。

4

3 に答える 3

3

のタイプはHomeScreen.classですClassClassしたがって、次のアクティビティを示すためにaのインスタンスを渡すことができます。例(読みやすさのためにフォーマットされています):

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

と呼び出す:

getUserNotificationObject(..., HomeScreen.class)

ただし、より柔軟なのは、関数にを渡すこと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 に答える