在 DialogFragment class 中创建通知不起作用! (Android)

Creating a notification inside DialogFragment class doesn't work! (Android)

我一直在四处寻找并尝试了不同的解决方案,但我似乎无法让它发挥作用。

我有一个带有列表和 "Add" 按钮的 MainActivity。当我单击添加按钮时,我打开了一个 DialogFragment。在对话框中,用户输入数据并按 "add",我想要一个显示 "xxxx has been added to list" 但从未显示的通知。

我有一个单独的 class 用于 AddDialog,如下所示:

public class AddDialogFragment extends DialogFragment {
Button btnAdd;
Button btnCancel;
TextView etNewSerial, etNewBrand, etNewModel;
String newSerial, newBrand, newModel;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.dialog_add, container, false);
    getDialog().setTitle("Add new serial!");
    btnAdd = (Button) rootView.findViewById(R.id.btnAddNew);
    etNewSerial = (TextView) rootView.findViewById(R.id.etNewSerial);
    etNewBrand = (TextView) rootView.findViewById(R.id.etNewBrand);
    etNewModel = (TextView) rootView.findViewById(R.id.etNewModel);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             newSerial = etNewSerial.getText().toString();
             newBrand = etNewBrand.getText().toString();
             newModel = etNewModel.getText().toString();

            String url = "MY_VOLLEY_URL"
            StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    int icon = 0;
                    CharSequence notiText = "Item Added!";
                    long notiTime = System.currentTimeMillis();
                    CharSequence notiTitle = "Item Added!";//Titel
                    CharSequence notiContent = newSerial + " added!";
                    PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT);
                    NotificationCompat.Builder notBuilder = new NotificationCompat.Builder(getActivity());
                    notBuilder.setSmallIcon(icon)
                            .setTicker(notiText)
                            .setWhen(notiTime)
                            .setAutoCancel(true)
                            .setContentText(notiContent)
                            .setContentTitle(notiTitle)
                            .setContentIntent(pendingIntent);
                    Notification notification = notBuilder.build();
                    NotificationManager myNotificationManager = (NotificationManager)getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
                    myNotificationManager.notify(1, notification);
                    getDialog().dismiss();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            });
            Volley.newRequestQueue(getActivity()).add(request);
        }
    });
    return rootView;
}
}

但通知从未显示。我一直在尝试用不同的上下文方法替换 "getActivity()" ,但这似乎并不重要。有没有人有一些技巧可以使这成为可能?

我想知道您收到此错误是因为您将 0 作为小图标 (setSmallIcon) 的 resourceId 传递。也许,NotificationManager 忽略了此通知,因为它无法正确构建(没有以 0 作为 ID 的资源。

所以,尝试改变这个:

notBuilder.setSmallIcon(icon)
    ....

收件人:

notBuilder.setSmallIcon(android.R.color.transparent)
    ....

我以 android.R.color.transparent 为例,因为您对显示任何图标都不感兴趣。但是您可以更改为任何 color/drawable 等等...