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

First, you should not have a MyActivity.getInstance(), as that is a memory leak.

Second, whatever code is raising the Notification already has access to a Context, as that is where you get a NotificationManager from. getPackageName() is a method on Context. So, for example, your GCM IntentService is a Context, and so not only can it use getSystemService() to retrieve a NotificationManager, but it can call getPackageName() on itself to find out your app's package name.

于 2013-06-17T21:01:48.260 に答える