1

声音打我试图打的通知从资产文件夹中的声音,但是当触发通知显示通知,但不播放声音并没有在logcat中没有错误或警告。我正在使用此代码来创建通知:Android通知从资产文件夹

builder = new NotificationCompat.Builder(context) 
        // Set Icon 
        .setSmallIcon(R.drawable.ic_launcher) 
        // Set Ticker Message 
        .setTicker(message) 
        // Set Title 
        .setContentTitle(message) 
        // Set Text 
        .setContentText(context.getString(R.string.app_name)) 
        // Add an Action Button below Notification 
        .addAction(R.drawable.share, 
          context.getString(R.string.share), pendingShare) 
        // Set PendingIntent into Notification 
        .setContentIntent(contentIntent) 
        // Dismiss Notification 
        .setAutoCancel(true) 
        .setSound(
          Uri.parse("file:///android_assets/" 
            + prefs.getString(Constants.NOTIF_SOUND, 
              "mp3/al_affassi_full.mp3"))); 

有人可以帮我解决这个问题吗? 谢谢!

回答

1

把你的MP3文件raw文件夹下。如果你把它放在asset/之下,它会被压缩两次,你不能使用它。

0

在res下创建一个名为'raw'的文件夹,并在其中复制你的mp3文件。

那么你可以设置,

setSound(Uri.parse( “android.resource://” 你的包名 “/” + R.raw.your_map3_name);

0
Android notifications play sound from raw folder 
try 
    { 

     int res_sound_id = MainActivity.this.getResources().getIdentifier("sound name", "raw", MainActivity.this.getPackageName()); 
     Uri u= Uri.parse("android.resource://" + MainActivity.this.getPackageName() + "/" +res_sound_id); 

     Intent intent = new Intent(MainActivity.this, MainActivity.class); 
     PendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); 
     long[] pattern = { 0, 200, 500 }; 
     Notification mNotification = new Notification.Builder(MainActivity.this) 
       .setContentTitle("Its time to Pray") 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentIntent(pIntent) 
       .setSound(u) 
       .setVibrate(pattern) 
       .setAutoCancel(true) 
       .build(); 
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.notify(0, mNotification); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    }