首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RingtoneManager.setActualDefaultRingtoneUri()在API 23中工作吗?

RingtoneManager.setActualDefaultRingtoneUri()在API 23中工作吗?
EN

Stack Overflow用户
提问于 2017-03-15 11:18:16
回答 1查看 1.4K关注 0票数 6

这是一个简单的问题,也可能是一个简单的答案,但有大量的上下文。

的问题: setActualDefaultRingtoneUri()在API 23中还能工作吗?因为我不能让它发挥作用

上下文:我用设置了AndroidManifest.xml

代码语言:javascript
复制
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

应用程序self使用以下代码分配权限

代码语言:javascript
复制
public void desirePermissionCode()
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.System.canWrite(this)) {
        new AlertDialog.Builder(this)
                .setMessage("Please Assign Meep Meep Write Permissions")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
                        intent.setData(Uri.parse("package:" + getPackageName()));
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                        try {
                            startActivity(intent);
                        } catch (Exception e) {
                            Log.e("MainActivity", "error starting permission intent", e);
                        }
                    }
                })
                .show();
        return;
    }
}

然后,我有一个简单的2按钮演示:一个与此(不起作用)

代码语言:javascript
复制
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/raw/meepmeep");
grantUriPermission("com.android.systemui", uri,
                   Intent.FLAG_GRANT_READ_URI_PERMISSION);
RingtoneManager.setActualDefaultRingtoneUri(
          MainActivity.this,
          RingtoneManager.TYPE_RINGTONE,
          uri
 );

其中一个(起作用)

代码语言:javascript
复制
MediaPlayer mpintro;
mpintro = MediaPlayer.create(me, Uri.parse("android.resource://"+getPackageName()+"/raw/meepmeep"));
mpintro.start();

有人能解释一下为什么,当添加了两个权限时,meepmeep.mp3在res文件夹中,那么为什么事件会在应用程序中播放声音,而不在RingtoneManager.setActualDefaultRingtoneUri中分配铃声呢?

EN

回答 1

Stack Overflow用户

发布于 2017-06-14 06:48:49

请参阅此链接:

SETTINGS

如果应用程序的目标是API级别23或更高,则应用程序用户必须通过权限管理屏幕显式授予应用程序该权限。该应用程序通过发送带有动作ACTION_MANAGE_WRITE_SETTINGS的意图来请求用户的批准。该应用程序可以通过调用Settings.System.canWrite()来检查它是否具有此授权。

请不要使用startActivity(意图),而是请使用startActivityForResult来听取MANAGE_WRITE_SETTINGS活动的反馈。在onActivityResult方法中,您可以检查请求代码并再次检查Settings.System.canWrite,如果您现在有写权限,那么您需要再次设置铃声,这不是自动的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42808241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档