我在androidstudio的asset文件夹中找不到设置rtingtone的方法

e4yzc0pl  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(462)

你好,stackoverflow社区。我知道这个问题以前提过,但在答案中总是有一些东西留下来,而且我缺乏专业知识,无法推断出其余的。
问题是,我正在开发我的第一个android应用程序,它从assets文件夹中的文件夹设置铃声。
我已经设法从资产播放声音文件,但找不到方法来获得uri路径设置为铃声相同的音频文件。
求你了,我需要帮助!

  1. ListView assetsListView;
  2. MediaPlayer mediaPlayer;
  3. ArrayList<String> arrayList;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. arrayList = new ArrayList<String>();
  9. ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList);
  10. assetsListView = findViewById(R.id.assetsListView);
  11. final AssetManager assetManager = getAssets();
  12. System.out.println("ASSES" + assetManager);
  13. //*****************************listting files from the assets folder ***********************//
  14. try {
  15. // for assets folder add empty string
  16. String[] fileList = assetManager.list("");
  17. if (fileList == null) {
  18. // dir does not exist or is not a directory
  19. } else {
  20. for (int i=0; i<fileList.length; i++) {
  21. // Get filename of file or directory
  22. String filename = fileList[i];
  23. }
  24. }
  25. // for assets/subFolderInAssets add only subfolder name
  26. String[] fileListInSubfolder = assetManager.list("ringtones");
  27. System.out.println("filesinsubfolder " + (fileListInSubfolder == null));
  28. if(fileListInSubfolder == null) {
  29. // dir does not exist or is not a directory
  30. }else{
  31. for (int i=0; i < fileListInSubfolder.length; i++) {
  32. // get filename from files in the subdirectory
  33. String filenameSubD = fileListInSubfolder[i];
  34. System.out.println("FILENAME IN SUBFOLDER plin: " + filenameSubD.substring(0,(int)filenameSubD.length()-4)); // cuts the extension of the file
  35. arrayList.add(filenameSubD.substring(0,(int)filenameSubD.length()-4)); /// adds the filename to the list array
  36. }
  37. }
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. }
  41. //******************************************************************************************//
  42. final boolean settingsCanWrite = Settings.System.canWrite(this); // since API23 permission for write-settings is needed
  43. if(!settingsCanWrite) { // If do not have write settings permission then open the Can modify system settings panel.
  44. Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); // goes to settings and is needed to manually add permission to this app
  45. startActivity(intent);
  46. }else {
  47. assetsListView.setAdapter(arrayAdapter);
  48. assetsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  49. @Override
  50. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  51. String fileName = arrayList.get(position);
  52. String fileWithExtension = "file:///android_assets/ringtones/" + fileName;
  53. //++++++++++++++++++++++++++++++++++++++RINGTONE++++++++++++++++++++++++++++++++++++++++++++//
  54. Uri uri = Uri.fromFile(new File("file:///android_assets/ringtones/" + fileName + ".mp3"));
  55. Uri uri2 = Uri.parse("file:///android_assets/" + fileName);
  56. Uri uri3 = Uri.parse("assets/ringtones/" + fileName + ".mp3");
  57. Uri uri4 = Uri.parse("assets/ostinato.mp3");
  58. String testFilePath = uri.getPath();
  59. File file = new File("file:///android_assets/ringtones/", fileName);
  60. System.out.println("FILEEE" + file);
  61. System.out.println("lavativa " + uri);
  62. play(fileName, uri4);
  63. }
  64. });
  65. }
  66. }
  67. public void play (String fileToPlayer, Uri uriPath) { // play from the assets/ringtone folder
  68. if (mediaPlayer == null) {
  69. try {
  70. AssetFileDescriptor afd = getAssets().openFd("ringtones/" + fileToPlayer + ".mp3");
  71. mediaPlayer = new MediaPlayer();
  72. mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
  73. afd.close();
  74. mediaPlayer.prepare();
  75. mediaPlayer.start();
  76. } catch (Exception ex) {
  77. Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
  78. }
  79. mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  80. @Override
  81. public void onCompletion(MediaPlayer mp) {
  82. pause();
  83. }
  84. });
  85. } else {
  86. pause();
  87. }
  88. System.out.println("URI" + uriPath);
  89. RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE,uriPath);
  90. Toast.makeText(this, "message: " + uriPath, Toast.LENGTH_LONG).show();
  91. }
qlvxas9a

qlvxas9a1#

您必须将文件从资源复制到文件系统,这样您就有了一个文件。
那你就可以用那个文件了。

相关问题