15

当用户单击通知时,当应用程序处于后台时,我正在尝试使用一些额外的参数打开特定的活动。我正在使用click_action它,它工作正常,应用程序打开所需的活动。

现在我需要服务器将一个额外的参数 an 传递id给这个 Activity,以便我可以显示与通知相关的所需详细信息。就像电子邮件应用程序一样,当我们单击通知时,会打开该特定电子邮件的详细信息。

我怎样才能做到这一点?

4

2 回答 2

38

好的,我找到了解决方案。

这是我从服务器发送到应用程序的 json

{
  "registration_ids": [
    "XXX",
    ...
  ],
  "data": {
    "id_offer": "41"
  },
  "notification": {
    "title": "This is the Title",
    "text": "Hello I'm a notification",
    "icon": "ic_push",
    "click_action": "ACTIVITY_XPTO"
  }
}

在 AndroidManifest.xml

<activity
    android:name=".ActivityXPTO"
    android:screenOrientation="sensor"
    android:windowSoftInputMode="stateHidden">
    <intent-filter>
        <action android:name="ACTIVITY_XPTO" />        
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

当应用程序关闭或在后台并且用户单击它打开我的 ActivityXPTO 的通知时,检索 id_offer 我只需要做

public class ActivityXPTO extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        String idOffer = "";

        Intent startingIntent = getIntent();
        if (startingIntent != null) {
            idOffer = startingIntent.getStringExtra("id_offer"); // Retrieve the id
        }

        getOfferDetails(idOffer);
    }

    ...
}

就是这样...

于 2016-06-01T11:20:53.633 回答
0

将附加信息添加到用于启动 Activity 的 Intent,并在方法 onCreate 中的 Activity 中使用 getIntent().getExtras() 来使用它们。例如:

开始活动:

Intent intent = new Intent(context, TargetActivity.class);
Bundle bundle = new Bundle();
bundle.putString("extraName", "extraValue"); 
intent.putExtras(bundle);
startActivity(intent); 

活动中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle bundle = getIntent().getExtras();
    String value = bundle.getString("extraName");
    ....
}
于 2016-06-01T10:16:36.040 回答