我想播放自己的自定义通知声音,将我的应用设置为系统默认声音。因此,当我收到GCM消息时,我有一个名为generateNotification
的函数,它会在状态栏中发出通知并播放声音。
目前,我设置了这样的声音路径:
String GENERAL_NOTIFICATION_SOUND = "android.resource://" + MyActivity.getInstance().getPackageName() + "/" + R.raw.sound_file;
这在应用程序打开时有效,即使应用程序最近关闭也是如此。但是,如果应用程序被Android的内存管理关闭,那么MyActivity.getInstance()
会返回null
,并且我的应用程序因NullPointerException崩溃而没有正确显示通知,因为它无法解析路径
我相信我可以通过硬编码路径解决这个问题,但我觉得必须有更好的方法。如何在应用程序未打开时设置需要访问的文件的路径?
答案 0 :(得分:2)
首先,您不应该有MyActivity.getInstance()
,因为这是内存泄漏。
其次,无论代码是什么,Notification
都可以访问Context
,因为这是您获得NotificationManager
的地方。 getPackageName()
是Context
上的一种方法。因此,例如,您的GCM IntentService
是Context
,因此不仅可以使用getSystemService()
来检索NotificationManager
,还可以调用getPackageName()
找出你的应用程序包名称。