3

Ну, у меня есть служба, которая запускается с уведомлением, я хочу добавить дополнительную информацию с новым намерением, открываемым, когда пользователь нажимает уведомление, поэтому, когда открывается MainActivity, я могу получить дополнительную информацию. Я пробовал по-разному, но я просто не знаю, как заставить его работать.Служба уведомлений положить дополнительно на уведомление кликнуть, как?

Вот что я пробовал:

Это MyService

Intent intent = new Intent(MyService.this, MainActivity.class); 
        intent.putExtra("EXTRA", StringTEST); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
        PendingIntent contentIntent = PendingIntent 
         .getActivity(getApplicationContext(), 
            0, intent, 0); 

это открывает свою деятельность в порядке, но я не могу получить дополнительную ?? Это, как я пытался получить его:

MainActivity

@Override 
public void onNewIntent(Intent intent){ 
    Bundle extras = intent.getExtras(); 
    if(extras != null){ 
     String name = extras.getString("EXTRA"); 
     System.out.println(name); 
    } 
} 

@Override 
protected void onResume() { 
    Bundle extras = getIntent().getExtras(); 
    System.out.println(extras+""); 
    if (extras != null) { 
     try { 
      onNewIntent(getIntent()); 
      Intent i = getIntent(); 
      String name = i.getStringExtra("EXTRA"); 
      System.out.println(name); 
      currentDir = new File(name); 

      changeFiles(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    super.onResume(); 
} 

Таковы два пути я пытался, но я все еще получаю пустой ... Что я делаю не так?

Благодаря

ответ

20

Я предполагаю, что ваша проблема здесь:

PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 
          0, intent, 0); 

Вы передаете intent к getActivity() и ожидая, что вы получите обратно PendingIntent, который соответствует вашим Intent и включает в себя ваши дополнительные услуги. К сожалению, если в системе уже есть PendingIntent, который соответствует вашему Intent (без с учетом ваших Intent дополнительных услуг), то getActivity() вернет вас, вместо этого, PendingIntent.

Чтобы увидеть, если это проблема, попробуйте следующее:

PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 
          0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

Это говорит о том, что если есть уже PendingIntent, который соответствует вашей Intent где-то в системе, что она должна заменить массовку с теми, в вашей intent параметр.

+0

Пробовал это, и я тоже не получил его, но мне удалось заставить его работать, сделав его «статическим строком», я знаю, это не лучший способ, но ... –

+0

Рад, что вы его работали. Я до сих пор не понимаю, в чем проблема. Возможно, вы это выясните. Если вы это сделаете, ответьте на свой вопрос, чтобы другие могли воспользоваться им. –

+0

Буду признателен, чтобы не тратить время. –

2

У меня была та же проблема. Вы использовали getIntent().getExtras(), но вы должны были использовать getIntent().getStringExtra(id). Также упоминается здесь: Android: intent.putExtra in a Service Class to get notifications

Также считается нецелесообразным использование статических переменных, как вы упомянули в своем комментарии, я бы предложил избежать этого.

+0

К моему удивлению, это действительно сработало , однако, я ввел его в строку в другом случае. –

 Смежные вопросы

  • Нет связанных вопросов^_^