Mr *_*lis 5 java android ringtonemanager
这是一个简单的问题,可能是一个简单的答案,但有大量的上下文。
问题:setActualDefaultRingtoneUri()在 API 23中仍然有效吗?因为我无法让它发挥作用
语境:
我已经建立了AndroidManifest.xml与
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
应用程序自行使用此代码分配权限
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个简单的 2 按钮演示:一个(不起作用)
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
);
Run Code Online (Sandbox Code Playgroud)
和一个(确实有效)
MediaPlayer mpintro;
mpintro = MediaPlayer.create(me, Uri.parse("android.resource://"+getPackageName()+"/raw/meepmeep"));
mpintro.start();
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么,当添加了 2 个权限,并且meepmeep.mp3在 res 文件夹中,那么为什么事件会触发以在应用程序中播放声音但没有分配铃声RingtoneManager.setActualDefaultRingtoneUri
请参考这个链接:
https://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS
如果应用程序的目标 API 级别为 23 或更高级别,则应用程序用户必须通过权限管理屏幕明确向应用程序授予此权限。应用程序通过使用操作 ACTION_MANAGE_WRITE_SETTINGS 发送意图来请求用户批准。应用程序可以通过调用Settings.System.canWrite()来检查它是否具有此授权。
请不要使用startActivity(intent),而是使用startActivityForResult来监听MANAGE_WRITE_SETTINGS活动的反馈。在onActivityResult方法中,您可以检查请求代码并再次检查Settings.System.canWrite,如果您现在有写权限,那么您需要重新设置铃声,这不是自动的。
| 归档时间: |
|
| 查看次数: |
1125 次 |
| 最近记录: |