5

onCreate「リダイレクト」したい通知とイベントを介してアクティビティを実行しようとしています。これに、Intentクラスの情報についての考えを追加します。重要な機能は、通知を生成するクラスがサービスを介して実行されることです。getApplicationContextクラスによって提供されるメソッドからコンテキストを取得しますandroid.app.Application。メソッドを呼び出すたびにgetExtras()が返されnullます。私は何が間違っているのですか?

public class OXAppUpdateHandler {

    private void addNotification(Context context, int iconID,
           CharSequence tickerText, CharSequence title, CharSequence content) {

        CharSequence notificationTicket = tickerText;
        CharSequence notificationTitle = title;
        CharSequence notificationContent = content;

        long when = System.currentTimeMillis();

        Intent intent = new Intent(context, MainActivity_.class);
        intent.setFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.putExtra(OPEN_UPDATE_ACTIVITY_KEY, 1);

        PendingIntent pendingIntent = 
            PendingIntent.getActivity(context, 0, intent, 0);

        NotificationManager notificationManager = 
            (NotificationManager) context.getSystemService(
                Context.NOTIFICATION_SERVICE);
        Notification notification = 
            new Notification(iconID, notificationTicket, when);
        notification.setLatestEventInfo(context, notificationTitle, 
                                        notificationContent, pendingIntent);
        notificationManager.notify(NOTIFICATION_ID, notification);
    }

    public static boolean isUpdateStart(Intent intent) {
        Bundle bundle = intent.getExtras();
        boolean result = bundle != null && 
                         bundle.containsKey(OPEN_UPDATE_ACTIVITY_KEY);
        if (result) {
            bundle.remove(OPEN_UPDATE_ACTIVITY_KEY);
        }
        return result;
        }
    }

    @EActivity(R.layout.activity_main)
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (OXAppUpdateHandler.isUpdateStart(getIntent())) {
                startActivity(new Intent(this, UpdateActivity_.class));
            }
        }
    }
4

2 に答える 2

21

私は窓から身を乗り出して、あなたの問題がここにあると推測します:

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

あなたは、あなたに一致し、あなたのエキストラを含むを取り戻すことを期待していますintent。残念ながら、システム内に(エクストラを考慮せずに)一致するフローティングがすでに存在する場合は、代わりにそれを返します。getActivity()PendingIntentIntentPendingIntentIntentIntentgetActivity()PendingIntent

これが問題であるかどうかを確認するには、次のことを試してください。

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntentこれは、システムのどこかに一致するがすでに存在する場合、エクストラをパラメータIntentのエクストラに置き換える必要があることを示していintentます。

于 2013-01-15T23:03:21.543 に答える
-1

(1)ここをチェックして、データを意図的に追加しているコードが表示されないため、put/getエクストラを正しく使用していることを確認してください。

(2)getintentとgetextraを呼び出しておらず、その結果、バンドルから実際に何も取得していないようです(情報が存在すると仮定します)。ブール値をチェックする場合は、バンドルに配置するデータを次のように取得する必要があります。

Bundle bundle = getIntent().getExtras();

if (bundle.getBooleanExtra("WHATEVER"){
   //whatever you want to do in here
} 
于 2013-01-15T13:47:56.867 に答える