Media sound bei einer Radio App kontrolieren

  • Antworten:0
Andreja
  • Forum-Beiträge: 1

11.03.2012, 13:16:22 via Website

Hallo,
ich benötige Hilfe bei einer open source app für mein Radio. Bin seit ca. 1 woche! :( auf der suche nach entsprechende Hilfe und hoffe jemand kann mir Antwort zu meiner Frage geben. Meine Kenntnisse in java sind sehr eingeschränkt, deswegen bitte ich um detallierte Hilfe bei meinem Beispiel.

Meine App, spielt den Stream ab, funktioniert alles schön und super. Volume seekbar ist auch schon eingebaut, Hintergrund geändert etc.
Mein größtes Problem jetzt ist, wenn jemand anruft, der Sound von der app wird nicht leiser und das schlimmste noch, während des Gesprächs wird der Sound von der app auch nicht leiser und somit kann man keine Telefonate durchführen. Die app soll folgendes tun, bei eingehenden Anrufe soll der sound meiner App leiser werden, bzw. auf 0 und während des gesprächs auch gestellt werden, kein stop und play. Nach dem Gespräch soll der Sound wieder hergestellt werden.

In ein Paar Foren habe ich gelesen, man solle es mit PhoneStateListener und TelephonyManager machen, in andere Foren und Blogs wieder rum hat man empfohlen, man solle den AudioManager.requestAudioFocus nehmen.

Kann mir einer bei meiner app helfen und sagen was ich bei der AndroidManifest.xml hinzufügen soll und an welcher Stelle wo ich was ändern muss in meine Radio.java class damit mein Problem behoben wird? Ich würde mich sehr sehr freuen!!! :)

Hier meine Radio.java

1package com.radio.radio;
2
3import android.app.Activity;
4import android.app.AlertDialog;
5
6import com.google.ads.*;
7import com.spoledge.aacplayer.AACFileChunkPlayer;
8import com.spoledge.aacplayer.AACPlayer;
9import com.spoledge.aacplayer.ArrayAACPlayer;
10import com.spoledge.aacplayer.ArrayDecoder;
11import com.spoledge.aacplayer.Decoder;
12import com.spoledge.aacplayer.History;
13import com.spoledge.aacplayer.PlayerCallback;
14
15import android.content.Context;
16import android.content.DialogInterface;
17import android.content.Intent;
18import android.content.ServiceConnection;
19
20import android.media.AudioManager;
21import android.net.ConnectivityManager;
22import android.os.Bundle;
23import android.os.Handler;
24import android.os.MessageQueue.IdleHandler;
25import android.util.Log;
26import android.view.View;
27
28import android.widget.ArrayAdapter;
29import android.widget.AutoCompleteTextView;
30import android.widget.Button;
31import android.widget.EditText;
32import android.widget.ProgressBar;
33import android.widget.SeekBar;
34import android.widget.TextView;
35
36
37
38// This is the main activity.
39
40public class Radio extends Activity implements View.OnClickListener, PlayerCallback {
41
42private History history;
43private AutoCompleteTextView urlView;
44private Button btnFaad2;
45private Button btnFFmpeg;
46private Button btnOpenCORE;
47private Button btnMMSWMA;
48private Button btnStop;
49private TextView txtStatus;
50private TextView txtPlayStatus;
51private EditText txtBufAudio;
52private EditText txtBufDecode;
53private ProgressBar progress;
54private Handler uiHandler;
55private AudioManager mAudioManager;
56
57
58
59 // Decoder features
60private int dfeatures;
61
62private AACPlayer aacPlayer;
63private AACFileChunkPlayer aacFileChunkPlayer;
64
65
66 ////////////////////////////////////////////////////////////////////////////
67 // PlayerCallback
68 ////////////////////////////////////////////////////////////////////////////
69
70 private boolean playerStarted;
71
72 public void playerStarted() {
73 uiHandler.post( new Runnable() {
74 public void run() {
75 txtBufAudio.setEnabled( false );
76 txtBufDecode.setEnabled( false );
77 btnFaad2.setEnabled( false );
78 btnFFmpeg.setEnabled( false );
79 btnOpenCORE.setEnabled( false );
80 btnMMSWMA.setEnabled( false );
81 btnStop.setEnabled( true );
82
83 txtPlayStatus.setText( R.string.text_buffering );
84 progress.setProgress( 0 );
85 progress.setVisibility( View.VISIBLE );
86
87 playerStarted = true;
88 }
89 });
90 }
91
92
93
94
95
96 /**
97 * This method is called periodically by PCMFeed.
98 *
99 * @param isPlaying false means that the PCM data are being buffered,
100 * but the audio is not playing yet
101 *
102 * @param audioBufferSizeMs the buffered audio data expressed in milliseconds of playing
103 * @param audioBufferCapacityMs the total capacity of audio buffer expressed in milliseconds of playing
104 */
105 public void playerPCMFeedBuffer( final boolean isPlaying,
106 final int audioBufferSizeMs, final int audioBufferCapacityMs ) {
107
108 uiHandler.post( new Runnable() {
109 public void run() {
110 progress.setProgress( audioBufferSizeMs * progress.getMax() / audioBufferCapacityMs );
111 if (isPlaying) txtPlayStatus.setText( R.string.text_playing );
112 }
113 });
114 }
115
116
117 public void playerStopped( final int perf ) {
118 uiHandler.post( new Runnable() {
119 public void run() {
120 enableButtons();
121 btnStop.setEnabled( false );
122 txtBufAudio.setEnabled( true );
123 txtBufDecode.setEnabled( true );
124 txtStatus.setText( R.string.text_stopped );
125 txtPlayStatus.setText( "" + perf + " %" );
126 progress.setVisibility( View.INVISIBLE );
127
128 playerStarted = false;
129 }
130 });
131 }
132
133
134 public void playerException( final Throwable t) {
135 uiHandler.post( new Runnable() {
136 public void run() {
137 new AlertDialog.Builder( Radio.this )
138 .setTitle( R.string.text_exception )
139 .setMessage( t.toString())
140 .setNeutralButton( R.string.button_close,
141 new DialogInterface.OnClickListener() {
142 public void onClick( DialogInterface dialog, int id) {
143 dialog.cancel();
144 }
145 }
146 )
147 .show();
148
149 txtStatus.setText( R.string.text_stopped );
150
151 if (playerStarted) playerStopped( 0 );
152 }
153 });
154 }
155
156
157 ////////////////////////////////////////////////////////////////////////////
158 // OnClickListener
159 ////////////////////////////////////////////////////////////////////////////
160
161 /**
162 * Called when a view has been clicked.
163 */
164 public void onClick( View v ) {
165 try {
166 switch (v.getId()) {
167
168 case R.id.view_main_button_faad2:
169 start( Decoder.DECODER_FAAD2 );
170 txtStatus.setText( R.string.text_using_FAAD2 );
171 break;
172
173 case R.id.view_main_button_ffmpeg:
174 start( Decoder.DECODER_FFMPEG );
175 txtStatus.setText( R.string.text_using_FFmpeg );
176 break;
177
178 case R.id.view_main_button_opencore:
179 start( Decoder.DECODER_OPENCORE );
180 txtStatus.setText( R.string.text_using_OpenCORE );
181 break;
182
183 case R.id.view_main_button_mmswma:
184 start( Decoder.DECODER_FFMPEG_WMA );
185 txtStatus.setText( R.string.text_using_MMSWMA );
186 break;
187
188 /*
189 case R.id.view_main_button_file:
190 stop();
191 aacFileChunkPlayer = new AACFileChunkPlayer( getUrl(), 8000, 8000 );
192 aacFileChunkPlayer.start();
193 txtStatus.setText( R.string.text_using_file_chunks );
194 break;
195 */
196
197 case R.id.view_main_button_stop:
198 stop();
199 break;
200 }
201 }
202 catch (Exception e) {
203 Log.e( "Radio", "exc" , e );
204 }
205 }
206
207
208 ////////////////////////////////////////////////////////////////////////////
209 // Protected
210 ////////////////////////////////////////////////////////////////////////////
211
212 @Override
213 protected void onCreate( Bundle savedInstanceState ) {
214 super.onCreate( savedInstanceState );
215
216 setContentView( R.layout.main );
217
218
219 // volume
220 final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
221 int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
222 int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
223 SeekBar volControl = (SeekBar)findViewById(R.id.volbar);
224 volControl.setMax(maxVolume);
225 volControl.setProgress(curVolume);
226 volControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
227
228 public void onStopTrackingTouch(SeekBar arg0) {
229 // TODO Auto-generated method stub
230
231 }
232
233 public void onStartTrackingTouch(SeekBar arg0) {
234 // TODO Auto-generated method stub
235
236 }
237
238 public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
239 // TODO Auto-generated method stub
240 audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
241 }
242 });
243
244 //
245
246
247
248
249 btnFaad2 = (Button) findViewById( R.id.view_main_button_faad2 );
250 btnFFmpeg = (Button) findViewById( R.id.view_main_button_ffmpeg );
251 btnOpenCORE = (Button) findViewById( R.id.view_main_button_opencore );
252 btnMMSWMA = (Button) findViewById( R.id.view_main_button_mmswma );
253 //Button b3 = (Button) findViewById( R.id.view_main_button_file );
254 btnStop = (Button) findViewById( R.id.view_main_button_stop );
255
256 urlView = (AutoCompleteTextView) findViewById( R.id.view_main_edit_url );
257 txtStatus = (TextView) findViewById( R.id.view_main_text_what );
258 txtPlayStatus = (TextView) findViewById( R.id.view_main_text_status );
259 txtBufAudio = (EditText) findViewById( R.id.view_main_text_bufaudio );
260 txtBufDecode = (EditText) findViewById( R.id.view_main_text_bufdecode );
261
262 progress = (ProgressBar) findViewById( R.id.view_main_progress );
263
264 txtBufAudio.setText( String.valueOf( AACPlayer.DEFAULT_AUDIO_BUFFER_CAPACITY_MS ));
265 txtBufDecode.setText( String.valueOf( AACPlayer.DEFAULT_DECODE_BUFFER_CAPACITY_MS ));
266
267 btnFaad2.setOnClickListener( this );
268 btnFFmpeg.setOnClickListener( this );
269 btnOpenCORE.setOnClickListener( this );
270 btnMMSWMA.setOnClickListener( this );
271 //b3.setOnClickListener( this );
272 btnStop.setOnClickListener( this );
273
274 dfeatures = ArrayDecoder.getFeatures();
275
276 enableButtons();
277
278 history = new History( this );
279 history.read();
280
281 if (history.size() == 0 ) {
282 history.addUrl( "/sdcard/local/cro" );
283 }
284
285 urlView.setAdapter( history.getArrayAdapter());
286 uiHandler = new Handler();
287 }
288
289
290 @Override
291 protected void onPause() {
292 super.onPause();
293 history.write();
294 }
295
296
297 @Override
298 protected void onDestroy() {
299 super.onDestroy();
300 stop();
301 }
302
303
304 ////////////////////////////////////////////////////////////////////////////
305 // Private
306 ////////////////////////////////////////////////////////////////////////////
307
308 private void start( int decoder ) {
309 stop();
310 aacPlayer = new ArrayAACPlayer( ArrayDecoder.create( decoder ), this,
311 getInt( txtBufAudio ), getInt( txtBufDecode ));
312 aacPlayer.playAsync( getUrl());
313 }
314
315
316 private void stop() {
317 if (aacFileChunkPlayer != null) { aacFileChunkPlayer.stop(); aacFileChunkPlayer = null; }
318 if (aacPlayer != null) { aacPlayer.stop(); aacPlayer = null; }
319 }
320
321
322 private String getUrl() {
323 String ret = urlView.getText().toString();
324
325 history.addUrl( ret );
326
327 return ret;
328 }
329
330
331 private void enableButtons() {
332 if ((dfeatures & Decoder.DECODER_FAAD2) != 0) btnFaad2.setEnabled( true );
333 if ((dfeatures & Decoder.DECODER_FFMPEG) != 0) btnFFmpeg.setEnabled( true );
334 if ((dfeatures & Decoder.DECODER_OPENCORE) != 0) btnOpenCORE.setEnabled( true );
335 if ((dfeatures & Decoder.DECODER_FFMPEG_WMA) != 0) btnMMSWMA.setEnabled( true );
336 }
337
338
339 private int getInt( EditText et ) {
340 return Integer.parseInt( et.getText().toString());
341 }
342
343
344 public void onReceive(Context context, Intent intent) {
345 // TODO Auto-generated method stub
346
347 }
348
349}

Antworten