0

I have a news article app that has a gridview of all articles then you can select the full article. I want the user to receive a notification when a new news article has been posted. It just has to be really simple, the app logo and some text 'new article posted!' and then when they click on the notification the app is opened. Here is my code below, i'm not sure what you need to see though so let me know if you need anything else.

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
    }
};

}
Ravi
  • 34,851
  • 21
  • 122
  • 183
user2953989
  • 2,791
  • 10
  • 36
  • 49

1 Answers1

0

I am not 100% sure about when new article is posted. If I am right, after adapter.notifyDataSetChanged() notify user with notificatoins by below code:

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());
febaisi
  • 644
  • 6
  • 15