startactivity - intent android شرح



إعلام Android PendingIntent إضافات null (3)

بالنسبة لي ، بالإضافة إلى إعداد Intent.FLAG_ACTIVITY_SINGLE_TOP ، اضطررت إلى إضافة إجراء فريد للنوايا:

    Intent resultIntent = new Intent(caller, NotificationActivity.class);

    String xId = getNextUniqueId();
    resultIntent.putExtra("x_id", xId);
    resultIntent.setAction(xId);
    resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

.. دون setAction (..) ، إضافات فارغة على نية وردت من بلدي NotificationActivity.

هذه الوظيفة تساعد على تفسير ذلك: https://stackoverflow.com/a/3128271/2162226

https://ffff65535.com

أحاول إرسال معلومات من الإشعار إلى نشاط تم استدعاؤه ، بينما حصلت على نشاط من نشاطي.

رمز الإخطار هو:

private void showNotification() {
Intent resultIntent = new Intent(this, MainActivity.class);
if (D)
    Log.d(TAG, "Id: " + Id);
resultIntent.putExtra("ineedid", deviceId);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MeterActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
    PendingIntent.FLAG_UPDATE_CURRENT);
// Bundle tmp = resultIntent.getExtras();
// if (tmp == null) {
// Log.d(TAG, "tmp bundle is null");
// } else {
// long id = tmp.getLong("ineedid", -1);
// Log.d(TAG, "tmp id : " + id);
// }
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
    BLEMessengerService.this)
    .setSmallIcon(R.drawable.ic_action_search)
    .setContentTitle("Event tracker")
    .setContentText("Events received").setOngoing(true)
    .setContentIntent(resultPendingIntent)
    .setWhen(System.currentTimeMillis());

int mId = R.string.service_notification_start_service;
mNM.notify(mId, mBuilder.getNotification());
}

رمز للحصول على المعلومات من النية في النشاط الرئيسي ؛

Bundle extras = getIntent().getExtras();
if (extras != null) {
    long deviceID = getIntent().getLongExtra("ineedid",
        -1);
    if (ID == -1) {
    if (D)
        Log.i(TAG_D, "Wrong Id received.");
    finish();
    } else {
    device = dataSource.getDeviceByID(deviceID);
    if (D)
        Log.i(TAG_D, "Get the id.");
    }
} else {
    if (D)
    Log.d(TAG_D, "Bundle is null");
    finish();
}

لقد تحققت قبل أن يتم إشعار الإشعار ، ولا تعد الحزمة فارغة ، وتحتوي على معرف في الإضافات. بينما عندما حاولت إحضارها من النية ، ذهبت. مساعدة.


في PendingIntent استخدم هذا العلم PendingIntent.FLAG_UPDATE_CURRENT إنه عمل بالنسبة لي

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

لقد حصلت للتو على الإجابة ، أضف السطر: resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

إشعار: إذا resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); كنتيجة resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); لن ينجح.

لقد حاولت أيضًا استخدام علامات أخرى مثل "FLAG_ACTIVITY_NEW_TASK" و "FLAG_ACTIVITY_RESET_TASK_IF_NEEDED". لا يعمل هنا.





android-pendingintent