2

Stackoverflow 上至少有 7 个与此相关的问题,我已经多次尝试了每一个建议和解决方案,但都没有奏效。这是我最近的尝试:

private Notification createNotification() {
       Notification notification = new Notification();


       if(notifyImage=="food")
         {
           notification.icon = R.drawable.food;
           notification.sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://com.example.memoryGuide/raw/start");
         }
       else
       {
           notification.icon = R.drawable.bar; 
           notification.sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://com.example.memoryGuide/raw/start");
       }


       notification.when = System.currentTimeMillis();
       notification.flags |= Notification.FLAG_AUTO_CANCEL;
       notification.flags |= Notification.FLAG_SHOW_LIGHTS;
       notification.defaults |= Notification.DEFAULT_VIBRATE;
       notification.defaults |= Notification.DEFAULT_LIGHTS; 
       notification.ledARGB = Color.WHITE;
       notification.ledOnMS = 1500;
       notification.ledOffMS = 1500;
       return notification;
 }

你可以看到我两次尝试使用的声音都无法正常工作,但图标工作得很好。我不知道我是否遗漏了任何东西以使其正常工作,但我使用的所有代码都在我的帖子中。

我的声音文件在 res/raw/start.mp3 中,按下按钮时我可以让这个声音工作,所以声音很好。

我认为包名是对的,我的应用程序在每个类的顶部都有这个:

package com.example.memoryGuide;

任何想法为什么声音从不播放?

4

3 回答 3

6

采用

notification.sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
        + "://" + getPackageName() + "/raw/start");

注意一件事。

字符串 android.content.ContextWrapper.getPackageName()

返回您的 android 应用程序的包名称。和

包 com.example.memoryGuide;

显示你的源包名的包名。

于 2013-03-16T19:46:48.980 回答
3

如果这个对你有用。请投票......

只需将您的声音文件放入 Res\raw\siren.mp3 文件夹::

然后把这个代码..这肯定会为你工作。

对于自定义声音::

 notification.sound = Uri.parse("android.resource://"
            + context.getPackageName() + "/" + R.raw.siren);

默认声音::

notification.defaults |= Notification.DEFAULT_SOUND;

对于自定义振动 ::

  long[] vibrate = { 0, 100, 200, 300 };
     notification.vibrate = vibrate;

默认振动 ::

notification.defaults |= Notification.DEFAULT_VIBRATE;
于 2013-08-01T12:14:47.767 回答
0

我在测试时遇到了类似的问题API 23。虽然我不知道问题的原因,但我确实设法找到了完成工作的解决方法。


Google 的一个示例中,这样构造了一个通知:

// Get a notification builder that's compatible with platform versions >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

// Define the notification settings.
builder.setSmallIcon(R.drawable.ic_launcher)
        // In a real app, you may want to use a library like Volley
        // to decode the Bitmap.
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher))
        .setColor(Color.RED)
        .setContentTitle(notificationDetails)
        .setContentText(getString(R.string.geofence_transition_notification_text))
        .setContentIntent(notificationPendingIntent);

// Dismiss notification once the user touches it.
builder.setAutoCancel(true);

// Get an instance of the Notification manager
NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// Issue the notification
mNotificationManager.notify(0, builder.build());

注意类NotificationCompat.Builder由于某种我无法理解的原因,除了默认的声音之外,它没有播放任何声音。换句话说,只有这样才有效:

// Define sound URI
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // Default
...
builder.setSound(soundUri); //Set the sound to play

但这没有:

Uri soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + 
                           getPackageName() + "/" + R.raw.name_of_sound);

Notification.Builder在简单地用(可用于API >= 11)替换构建器类之后,上面的“这不是”部分开始按预期工作。

结论:如果您愿意牺牲(或不感兴趣)与API < 11.

于 2016-04-02T21:23:44.283 回答