简体   繁体   English

我找不到从 android Studio 的资产文件夹中设置铃声的方法

[英]I can't find a way to set a rtingtone from the asset folder in android Studio

Hello stackoverflow community.你好 stackoverflow 社区。 I know this question have been made before, but in the answers always something left and my lack of expertise prevents me to deduce the rest.我知道这个问题之前已经提出过,但是在答案中总是留下一些东西,而且我缺乏专业知识使我无法推断出 rest。

the thing is, I'm developing my first android app, it sets ringtones from folders inside the assets folder.问题是,我正在开发我的第一个 android 应用程序,它从 assets 文件夹内的文件夹中设置铃声。

I already managed to play the sound files from assets but can't find the way to get the Uri path to set the same audio file as a ringtone.我已经设法播放资产中的声音文件,但找不到获取 Uri 路径以将相同的音频文件设置为铃声的方法。

Please I need help!请我需要帮助!

ListView assetsListView;
    MediaPlayer mediaPlayer;
    ArrayList<String> arrayList;

    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arrayList = new ArrayList<String>();
        ArrayAdapter<String> arrayAdapter   =  new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList); 
        assetsListView                      = findViewById(R.id.assetsListView);
        final AssetManager assetManager     = getAssets();


        System.out.println("ASSES" + assetManager);


        //***************************** listting files from the assets folder    ***********************//
        try {
            // for assets folder add empty string
            String[] fileList = assetManager.list("");
            if (fileList == null) {
                // dir does not exist or is not a directory
            } else {
                for (int i=0; i<fileList.length; i++) {
                    // Get filename of file or directory
                    String filename = fileList[i];
                }
            }

            // for assets/subFolderInAssets add only subfolder name
            String[] fileListInSubfolder = assetManager.list("ringtones");
            System.out.println("filesinsubfolder " + (fileListInSubfolder == null));
            if(fileListInSubfolder == null) {
                 // dir does not exist or is not a directory
             }else{
                 for (int i=0; i < fileListInSubfolder.length; i++) {
                     // get filename from files in the subdirectory

                     String filenameSubD = fileListInSubfolder[i];
                     System.out.println("FILENAME IN SUBFOLDER plin:  " + filenameSubD.substring(0,(int)filenameSubD.length()-4));  // cuts the extension of the file
                     arrayList.add(filenameSubD.substring(0,(int)filenameSubD.length()-4)); /// adds the filename to the list array
                 }
             }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //******************************************************************************************//

        final boolean settingsCanWrite = Settings.System.canWrite(this);  // since API23 permission for write-settings is needed

        if(!settingsCanWrite) {                 // If do not have write settings permission then open the Can modify system settings panel.
            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);      // goes to settings and is needed to manually add permission to this app
            startActivity(intent);
        }else {

            assetsListView.setAdapter(arrayAdapter);
            assetsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    String fileName = arrayList.get(position);                   
                    String fileWithExtension = "file:///android_assets/ringtones/" + fileName;   

                    //++++++++++++++++++++++++++++++++++++++RINGTONE++++++++++++++++++++++++++++++++++++++++++++//

                    Uri uri = Uri.fromFile(new File("file:///android_assets/ringtones/" + fileName + ".mp3"));
                    Uri uri2 = Uri.parse("file:///android_assets/" + fileName);
                    Uri uri3 = Uri.parse("assets/ringtones/" + fileName + ".mp3");
                    Uri uri4 = Uri.parse("assets/ostinato.mp3");

                    String testFilePath = uri.getPath();
                    File file = new File("file:///android_assets/ringtones/", fileName);
                    System.out.println("FILEEE" + file);


                    System.out.println("lavativa " + uri);
                    play(fileName, uri4);


                }
            });
        }
    }

    public void play (String fileToPlayer, Uri uriPath) {         // play from the assets/ringtone folder
        if (mediaPlayer == null) {
            try {
                AssetFileDescriptor afd = getAssets().openFd("ringtones/" + fileToPlayer + ".mp3");
                mediaPlayer = new MediaPlayer();
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                afd.close();
                mediaPlayer.prepare();
                mediaPlayer.start();
            } catch (Exception ex) {
                Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
            }

            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {    
                @Override
                public void onCompletion(MediaPlayer mp) {
                    pause();
                }
            });
        } else {
            pause();
        }

        System.out.println("URI" + uriPath);
        RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE,uriPath);
        Toast.makeText(this, "message: " + uriPath, Toast.LENGTH_LONG).show();

    }

You have to copy the file from assets to the file system so you have a file.您必须将文件从资产复制到文件系统,以便您拥有一个文件。

Then you can use that file.然后你就可以使用那个文件了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM