Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.90
SlashX6
16 / 16 / 1
Регистрация: 16.03.2012
Сообщений: 430
#1

Воспроизвести звук по нажатию кнопки - Программирование Android

13.05.2013, 13:46. Просмотров 4304. Ответов 2
Метки нет (Все метки)

Добрый день!

Используя пример, написал приложение, которое по нажатию на кнопку воспроизводит определённый звук.
Но загвоздка в том, что на все строки такого типа, Eclipse выдаёт ошибку.

Java
1
playSound(factory1);
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.clicktolisten;
 
import java.io.IOException;
 
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    
    SoundPool soundPool;
    AssetManager assets;
    int factory1, factory2, factory3, traffic;
    Context context;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        context = this;
        soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
        assets = getAssets();
        
        // Прикручиваем путь к звуку
        factory1 = loadSound("factorywhistle_01.mp3");
        factory2 = loadSound("factorywhistle_02.mp3");
        factory3 = loadSound("factorywhistle_03.mp3");
        traffic  = loadSound("traffic_02.mp3");
        
        
        Button factory1 = (Button) this.findViewById(R.id.button1);
        factory1.setOnClickListener( new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(factory1);
            }
        });
        
        Button factory2 = (Button) this.findViewById(R.id.button2);
        factory2.setOnClickListener( new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(factory2);
            }
        });
        
        Button factory3 = (Button) this.findViewById(R.id.button3);
        factory3.setOnClickListener( new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(factory3);
            }
        });
        
        Button traffic  = (Button) this.findViewById(R.id.button4);
        traffic.setOnClickListener( new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                playSound(traffic);
            }
        });
    }
    
    
    protected void playSound( int sound ) {
        // TODO Auto-generated method stub
        if ( sound > 0 )
            soundPool.play(sound, 1, 1, 1, 0, 1);
    }
 
    private int loadSound(String fileName) {
        // TODO Auto-generated method stub
        AssetFileDescriptor aFileDescriptor = null;
        try {
            aFileDescriptor = assets.openFd(fileName);
        } catch ( IOException e ) {
            e.printStackTrace();
            Toast.makeText( this, "Could't load file"+ fileName, Toast.LENGTH_SHORT).show();
            return -1;
        }
        return soundPool.load(aFileDescriptor, 1);
    }
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 13:46     Воспроизвести звук по нажатию кнопки
Посмотрите здесь:
Воспроизвести звук Android
Android Выбрать звук из списка доступных и воспроизвести его
Как воспроизвести фоновый звой звук при разговоре по телефону? Android
Android Звук по нажатию на button
Авторизация по нажатию кнопки Android
Android Выключение экрана по нажатию кнопки
Android Вызов телефона, по нажатию кнопки
Android Смена фото по нажатию кнопки
Очистка StringBuilder по нажатию кнопки Android
Как изменить ссылку по нажатию кнопки? Android
WebView - не открывается FilePicker по нажатию кнопки Android
Android Как создать кнопку по нажатию кнопки?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
proggamer12
17 / 17 / 2
Регистрация: 06.07.2012
Сообщений: 505
Завершенные тесты: 1
25.07.2015, 23:12     Воспроизвести звук по нажатию кнопки #2
Не уверен, что проблема в этом, но лучше использовать вместо конструктора фабричный метод: http://developer.android.com/referen...SoundPool.html
(This constructor was deprecated in API level 21. use SoundPool.Builder instead to create and configure a SoundPool instance)
vxg
Модератор
3146 / 1948 / 214
Регистрация: 13.01.2012
Сообщений: 7,439
26.07.2015, 13:37     Воспроизвести звук по нажатию кнопки #3
Цитата Сообщение от SlashX6 Посмотреть сообщение
Но загвоздка в том, что на все строки такого типа, Eclipse выдаёт ошибку
1 не мешало бы показать текст ошибки
2 не ясно как вы хотите что бы это работало - получаете локальную ссылку на кнопку, в обработчике нажатия пытаетесь передать эту ссылку (скорее всего будет ошибка области видимости или времени жизни или как то так) в функцию которая кроме того ждет аргумент типа int
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru