通知setSound()似乎实际上没有设置声音

时间:2018-12-03 09:23:58

标签: android uri android-notifications

我最近开始编写我的第一个包含通知的android项目(SDK 21-Android 5)

目前,我有一个小小的按钮,可以在点击时创建通知,并将其发送到应用程序本身。听起来很愚蠢,但目的是测试是否使用了自定义的声音和振动模式。

这是通过点击构造的通知:

Notification note = new Notification.Builder(this.requireContext(), "channel_id")
        .setSmallIcon(R.mipmap.icon)
        .setContentTitle("Title")
        .setContentText("Text")
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setCategory(NotificationCompat.CATEGORY_MESSAGE)
        .setVibrate(new long[] {500, 500, 500, 500, 500})
        .setSound(SettingsHandler.getRingtoneUri(this.requireContext())
        .setContentIntent(anyIntent)
        .setAutoCancel(true)
        .build();

SettingsHandler是我创建的用于处理设置的帮助程序类。如打开和关闭振动或选择铃声。 getRingtoneUri()执行以下操作:

public synchronized static Uri getRingtoneUri(Context context) {
    SharedPreferences prefs = context.getSharedPreferences("table_name", Context.MODE_PRIVATE);
    return Uri.parse(prefs.getString("ringtone_uri_key", RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION).toString()));
}

调试时,getRingtoneUri的结果类似于"content://media/internal/audio/media/31"。对我来说这看起来很有效。但是,在下一行中,创建的通知的sound属性仍为null。艾米知道我在做什么错吗?谢谢。

1 个答案:

答案 0 :(得分:0)

尝试一下:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric import utils
from cryptography.hazmat.primitives import hashes
import binascii

digestAlg_obj = hashes.SHA256()
digest_obj = hashes.Hash(self.digestAlg_obj, backend = default_backend())
digest_obj.update(bytes.fromhex('ABCD'))
digest_bytv = digest_obj.finalize()
print(binascii.hexlify(sha256_data))

with open(RSATest_private.pem, "rb") as key_file:
    self.prvKey_obj = serialization.load_pem_private_key(key_file.read(),password=None,backend=default_backend())
signature_bytv = self.prvKey_obj.sign(digest_bytv,padding.PSS(mgf = padding.MGF1(hashes.SHA1()),salt_length=padding.PSS.MAX_LENGTH),utils.Prehashed(hashes.SHA256()))
print(binascii.hexlify(signature_bytv))

您需要设置audioAttributes并创建您的通知频道。这适用于我所有4.2到9的Android