出现新的新闻文章时向用户发送通知

时间:2015-12-15 15:24:37

标签: java android android-notifications

我有一个新闻文章应用程序,其中包含所有文章的网格视图,然后您可以选择完整的文章。我希望用户在发布新的新闻文章时收到通知。它必须非常简单,应用程序徽标和一些文本“新文章发布!”然后当他们点击通知时,应用程序就会打开。以下是我的代码,我不知道你需要看什么,所以如果你还需要其他信息,请告诉我。

MainActivity.java

public class MainActivity extends AppCompatActivity {

private List<NewsRecord> newsListData = new ArrayList<NewsRecord>();

private GridView newsListView;

private NewsListAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GridView newsListView = (GridView) findViewById(R.id.newsFeedList);

    adapter = new NewsListAdapter(this, R.layout.adapter_news_list, newsListData, this);

    newsListView.setAdapter(adapter);

    newsListView.setOnItemClickListener(itemClicked);

    nextStart = 0;
    updateListData(nextStart, 20);
}

public int nextStart = 0;

public void updateListData(int StartPoint, int count){
    String url = "http://www.efstratiou.info/projects/newsfeed/getList.php?start=" + StartPoint + "&count=" + count;

    EDANewsApp app = EDANewsApp.getInstance();

    JsonArrayRequest jsonRequest = new JsonArrayRequest(url, listener, errorListener);
    app.requestQueue.add(jsonRequest);

    nextStart +=count;
}

@Override
public boolean onCreateOptionsMenu (Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        case R.id.action_about:
            Intent intent = new Intent(this, AboutActivity.class);
            startActivity(intent);
            return true;
        case R.id.action_search:
            return true;
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
}

AdapterView.OnItemClickListener itemClicked = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        Intent intent = new Intent(MainActivity.this, NewsItemActivity.class);

        intent.putExtra("newsItemId", newsListData.get(position).recordId);

        startActivity(intent);
    }
};

//Listeners
Response.Listener<JSONArray> listener = new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        //we successfully received the JSONArray
        //Here we will extract the data and use it in our app

        //Clear the dataset before loading new data
      //  newsListData.clear();
        //Go through all the JSON objects
        for (int i = 0; i < response.length(); i++) {

            try {
                //Get one JSON object
                JSONObject jsonObj = response.getJSONObject(i);

                //Put JSON data in a Java object
                NewsRecord record = new NewsRecord();
                record.recordId = jsonObj.getInt("record_id");
                record.title = jsonObj.getString("title");
                record.date = jsonObj.getString("date");
                record.shortInfo = jsonObj.getString("short_info");
                record.imageUrl = jsonObj.getString("image_url");

                newsListData.add(record);

            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
        adapter.notifyDataSetChanged();
    }
};

Response.ErrorListener errorListener = new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        //There was an error in the communication
        //We can notify the user about it
    }
};

}

1 个答案:

答案 0 :(得分:0)

我对发布新文章时并不是100%肯定。 如果我是对的,在adapter.notifyDataSetChanged()之后通过以下代码通知用户notificatoins:

NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!");
// Replace ResultActivity.class to your result notification class.
Intent resultIntent = new Intent(this, ResultActivity.class);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
            0,
            PendingIntent.FLAG_UPDATE_CURRENT
        );
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// first element (0) allows you to update the notification later on. 
mNotificationManager.notify(0, mBuilder.build());