Android: длительное нажатие кнопки для сохранения звука (Soundboard) - PullRequest
0 голосов
/ 23 мая 2019

Я собрал базовую деку с помощью Android Studio. Пожалуйста, будьте предупреждены; Я новичок в разработке приложений для Android.

У меня есть ряд кнопок, которые мне удалось воспроизвести в формате .mp3, которые я поместил в папку Raw и упомянул в своем файле MainActivity.java.

Хотя мне бы хотелось иметь возможность долго нажимать на кнопки, чтобы сохранить соответствующий звук в памяти телефона.

Кто-нибудь знает, как я могу это сделать, пожалуйста?

Большое спасибо, Билли.

import android.app.AlertDialog; 
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    MediaPlayer mysound1;
    MediaPlayer mysound2;
    MediaPlayer mysound3;
    MediaPlayer mysound4;
    MediaPlayer mysound5;
    MediaPlayer mysound6;
    MediaPlayer mysound7;
    MediaPlayer mysound8;
    MediaPlayer mysound9;
    MediaPlayer mysound10;
    MediaPlayer mysound11;
    MediaPlayer mysound12;
    MediaPlayer mysound13;
    MediaPlayer mysound14;
    MediaPlayer mysound15;
    MediaPlayer mysound16;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mysound1 = MediaPlayer.create(this, R.raw.nickingbentcoppers);
        mysound2 = MediaPlayer.create(this, R.raw.bentcoppers);
        mysound3 = MediaPlayer.create(this, R.raw.bentcoppers2);
        mysound4 = MediaPlayer.create(this, R.raw.bentcoppers3);
        mysound5 = MediaPlayer.create(this, R.raw.twentyfirstcentury);
        mysound6 = MediaPlayer.create(this, R.raw.imdoingmine);
        mysound7 = MediaPlayer.create(this, R.raw.illgoafterhim);
        mysound8 = MediaPlayer.create(this, R.raw.iamcalm);
        mysound9 = MediaPlayer.create(this, R.raw.likethebattle);
        mysound10 = MediaPlayer.create(this, R.raw.thatsright);
        mysound11 = MediaPlayer.create(this, R.raw.seenenough);
        mysound12 = MediaPlayer.create(this, R.raw.jesusmary);
        mysound13 = MediaPlayer.create(this, R.raw.changepage);
        mysound14 = MediaPlayer.create(this, R.raw.opendialog);
        mysound15 = MediaPlayer.create(this, R.raw.yes);
        mysound16 = MediaPlayer.create(this, R.raw.no);

    }

    public void sound1(View view) {
        mysound1.start();
    }

    public void sound2(View view) {
        mysound2.start();
    }

    public void sound3(View view) {
        mysound3.start();
    }

    public void sound4(View view) {
        mysound4.start();
    }

    public void sound5(View view) {
        mysound5.start();
    }

    public void sound6(View view) {
        mysound6.start();
    }

    public void sound7(View view) {
        mysound7.start();
    }

    public void sound8(View view) {
        mysound8.start();
    }

    public void sound9(View view) {
        mysound9.start();
    }

    public void sound10(View view) {
        mysound10.start();
    }

    public void sound11(View view) {
        mysound11.start();
    }

    public void sound12(View view) {
        mysound12.start();
    }

    public void sound13(View view) {
        mysound13.start();
    }

    public void sound14(View view) {
        mysound14.start();
    }

    public void sound15(View view) {
        mysound15.start();
    }

    public void sound16(View view) {
        mysound16.start();
    }

    @Override
    public void onBackPressed() {

        mysound14.start();

        new AlertDialog.Builder(this)

                .setMessage("Are you sure you want to exit, feller?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        mysound15.start();

                        ActivityCompat.finishAffinity(MainActivity.this);

                        System.exit(0);
                    }
                })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        mysound16.start();
                    }
                })

                .show();

    }

    public void gotopage1(View v) {

        mysound13.start();
        finish();

        Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
        startActivity(myIntent);

    }

    public void gotopage2(View v) {

        mysound13.start();

        Intent myIntent = new Intent(getBaseContext(), SecondActivity.class);
        startActivity(myIntent);

    }

}```


Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Я пытался применить то, что вы опубликовали, но, возможно, я где-то ошибся.

Я пытался сохранить звуковой файл во внутреннем хранилище (поскольку у меня нет внешней памяти).Когда я долго нажимаю на кнопку, всплывающее сообщение, которое я вставил, говорит о том, что файл сохранен (пока в каталог приложения), но я не думаю, что он вообще там сохраняется.

Можете ли вы взглянуть на мой код и посмотреть, где я ошибся.Спасибо за помощь этому новичку, я действительно ценю помощь людей!

'' '' @ Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_second);

    Button a;

    a = findViewById(R.id.button11);

    a.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View arg0) {

            String path = getFilesDir().getAbsolutePath();

            try {
                copyRAWtoPhone(R.raw.nickingbentcoppers, path);
            } catch (IOException e) {
                e.printStackTrace();
            }

            Toast.makeText(SecondActivity.this, "Saved to " + getFilesDir(), Toast.LENGTH_SHORT).show();

            return true;
                               }

        private void copyRAWtoPhone(int nickingbentcoppers, String path) throws IOException {

            InputStream in = getResources().openRawResource(nickingbentcoppers);
            FileOutputStream out = new FileOutputStream(path);
            byte[] buff = new byte[1024];
            int read = 0;
            try {
                while ((read = in.read(buff)) > 0) {
                    out.write(buff, 0, read);
                }
            } finally {
                in.close();
                out.close();
            }

        }
    }); ''''
0 голосов
/ 23 мая 2019

я не вижу, где находится ваша кнопка, но давайте предположим, что button_one сохранит mySound1 после длительного нажатия

button_one.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View arg0) {

     copyRAWtoPhone(R.raw.nickingbentcoppers,storagePath);

     return true;
 }
});

и вот функция copyRawToPhone, где первый идентификатор переменной будет вашим необработанным идентификатором файла, а путь строки будет вашим путем хранения телефона.

private void CopyRAWtoPhone(int id, String path) throws IOException {
InputStream in = getResources().openRawResource(id);
FileOutputStream out = new FileOutputStream(path);
byte[] buff = new byte[1024];
int read = 0;
try { 
    while ((read = in.read(buff)) > 0) {
        out.write(buff, 0, read);
    } 
} finally { 
    in.close();
    out.close();
 } 
}    
...