isi*_*_ko 18 permissions notifications android android-13
我的应用程序想要发送通知,但Android 33中添加的新权限默认被拒绝,不知何故Android在尝试创建通知通道时不会自动提示用户。我有什么遗漏的吗?如果没有,我如何(以及何时)请求许可?
Bab*_*ale 11
在 sdk 33 中尝试请求权限
package com.pk.name;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
final int PERMISSION_REQUEST_CODE =112;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT > 32) {
if (!shouldShowRequestPermissionRationale("112")){
getNotificationPermission();
}
}
}
public void getNotificationPermission(){
try {
if (Build.VERSION.SDK_INT > 32) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.POST_NOTIFICATIONS},
PERMISSION_REQUEST_CODE);
}
}catch (Exception e){
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// allow
} else {
//deny
}
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这也取决于targetSdk使用情况。请参阅下面的android notification-permission 文档。至少对于新安装的应用程序来说是这样。
权限对话框出现的时间取决于您应用程序的目标 SDK 版本:
如果您的应用面向 Android 13 或更高版本,则您的应用可以完全控制何时显示权限对话框。利用这个机会向用户解释为什么应用程序需要此权限,鼓励他们授予该权限。
如果您的应用程序的目标版本为 12L(API 级别 32)或更低,则当您的应用程序在创建通知通道后首次启动 Activity 时,或者当您的应用程序启动 Activity 然后创建其第一个通知通道时,系统会显示权限对话框。这通常是在应用程序启动时发生的。
小智 5
在清单文件中声明通知权限:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Run Code Online (Sandbox Code Playgroud)
检查权限:
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun checkNotificationPermission() {
val permission = Manifest.permission.POST_NOTIFICATIONS
when {
ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED -> {
// make your action here
}
shouldShowRequestPermissionRationale(permission) -> {
showPermissionRationaleDialog() // permission denied permanently
}
else -> {
requestNotificationPermission.launch(permission)
}
}
}
Run Code Online (Sandbox Code Playgroud)
请求许可:
private val requestNotificationPermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {isGranted->
if (isGranted) // make your action here
else "Permission denied".makeToast()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43243 次 |
| 最近记录: |