1

我想播放我自己的自定义通知声音,以将我的应用程序与系统默认声音区分开来。因此,当我收到 GCM 消息时,我有一个函数调用generateNotification,它在状态栏中放置通知并播放声音。

目前,我将路径设置为这样的声音:

String GENERAL_NOTIFICATION_SOUND = "android.resource://" + MyActivity.getInstance().getPackageName() + "/" + R.raw.sound_file;

这在应用程序打开时有效,即使应用程序最近关闭也是如此。但是,如果应用程序被 Android 的内存管理关闭,然后MyActivity.getInstance()返回null,并且我的应用程序崩溃并出现 NullPointerException 没有正确显示通知,因为它无法解析路径。

我相信我可以通过硬编码路径来解决这个问题,但我觉得必须有更好的方法。当应用程序可能未打开时,如何设置需要访问的文件的路径?

4

1 回答 1

2

首先,您不应该有MyActivity.getInstance(), 因为那是内存泄漏。

其次,任何提高 的代码都Notification可以访问 a Context,因为那是您从中获得 a 的NotificationManager地方。getPackageName()是一种方法Context。因此,例如,您的 GCMIntentService是 a Context,因此它不仅可以getSystemService()用来检索 a NotificationManager,而且可以调用getPackageName()自身来查找应用程序的包名称。

于 2013-06-17T21:01:48.260 回答