Question

I am trying to make a simple notification in my android app , but it always cracks. What I'm doing is that I have a button in the main activity when clicked it moves the following notification class : package com.megasoft.entangle;

import java.util.concurrent.ExecutionException;

import org.json.JSONException;
import org.json.JSONObject;
import com.megasoft.requests.GetRequest;

import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.widget.TextView;

public class OfferNotification extends Activity {

String notification = "";
String offerer = "";
String description = "";
String request = "";
String amount = "";
String notificationID = "1";
final String link = "Click here to view";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.offer_notification);

    GetRequest getRequest = new GetRequest("http://entangle2.apiary.io/notification/1");
    getRequest.addHeader("sessionID" , "testest");
    getRequest.execute("http://entangle2.apiary.io/notification/1");

    try {
        JSONObject json = new JSONObject(getRequest.get());
        description = json.getString("description");
        offerer = json.getString("offerer");
        request = json.getString("request");
        amount = json.getString("Amount");
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    notification = offerer + " has offered " + amount + " on your " + request + link;
    TextView txt = (TextView) findViewById(R.id.textView1);
    txt.setText(notification);
    createNotification();
}

public void createNotification() {

    NotificationCompat.Builder mBuilder = 
            new NotificationCompat.Builder(this)
            .setSmallIcon(RESULT_OK)
            .setContentTitle("Entangle:You got a new offer!")
            .setContentText(notification);


    Intent resultIntent = new Intent(this , Notification.class);

    TaskStackBuilder sb = TaskStackBuilder.create(this);
    sb.addParentStack(Notification.class);
    sb.addNextIntent(resultIntent);
    PendingIntent pIntent = 
            sb.getPendingIntent(0 , PendingIntent.FLAG_UPDATE_CURRENT);

    mBuilder.setContentIntent(pIntent);

    NotificationManager notificationMgr = 
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    int ID = Integer.parseInt(notificationID);
    notificationMgr.notify(ID , mBuilder.build());
}

}
Was it helpful?

Solution

Main issue is with the 'addParentStack' call, Your trying to add the Notification class as parent. It should be your OfferNotification Activity which is the parent.

  sb.addParentStack(OfferNotification.class);

Other issue is the Intent action should be an Activity.

  Intent resultIntent = new Intent(this , YourActivity.class);

Next issue is with the setSmallIcon , you should pass a valid resource id.

  .setSmallIcon(R.drawable.your_icon)

Make all these three changes, Your are out of cracks.

OTHER TIPS

Pretty sure when your app "cracks" you're throwing a RemoteServiceException and your logcat reads something like:

Bad notification posted from package: Couldn't create icon:

This happens because you're passing Activity.RESULT_OK in NotificationCompat.Builder.setSmallIcon. You need to be passing in a Drawable resource.

NotificationCompat.Builder mBuilder = 
            new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.your_notification_icon)
            .setContentTitle("Entangle:You got a new offer!")
            .setContentText(notification);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top