我最近开始编写我的第一个包含通知的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。艾米知道我在做什么错吗?谢谢。
答案 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