Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6348 / 949 | Длительность: 14:18:00
Специальности: Программист
Самостоятельная работа 7:

Многооконное приложение

package com.example.lab5_4_media;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.view.Gravity;
import android.view.SurfaceView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.app.Activity;

public class MediaActivity extends Activity implements OnPreparedListener, OnCompletionListener{
  
  MediaPlayer mediaPlayer;
  CheckBox chbLoop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_media);
            
      chbLoop = (CheckBox) findViewById(R.id.chb_Loop);
    chbLoop.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(CompoundButton buttonView,
          boolean isChecked) {
        if (mediaPlayer != null)
          mediaPlayer.setLooping(isChecked);
      }
    });
    }
    
    public void onClickStart(View view) {
    releaseMP();
    
    String DATA=((EditText)findViewById(R.id.et_MediaPath)).getText().toString();
    try {
      mediaPlayer = new MediaPlayer();
      mediaPlayer.setDataSource(DATA);
      mediaPlayer.setDisplay(((SurfaceView)
          findViewById(R.id.surfaceView1)).getHolder());
      //mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
      mediaPlayer.setOnPreparedListener(this);
      mediaPlayer.prepareAsync();
    } catch (Exception e) {
      showMessage("Ошибка воспроизведения");
    }

    if (mediaPlayer == null)
      return;
    
    mediaPlayer.setLooping(chbLoop.isChecked());
    mediaPlayer.setOnCompletionListener(this);
  }
    
    private void showMessage(String text){
    Toast toast = Toast.makeText(getApplicationContext(), text,
        Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
  }
    
    private void releaseMP() {
    if (mediaPlayer != null) {
      try {
        mediaPlayer.release();
        mediaPlayer = null;
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
    
    public void onClick(View view) {
    if (mediaPlayer == null)
      return;
    switch (view.getId()) {
    case R.id.b_Pause:
      if (mediaPlayer.isPlaying())
        mediaPlayer.pause();
      break;
    case R.id.b_Resume:
      if (!mediaPlayer.isPlaying())
        mediaPlayer.start();
      break;
    case R.id.b_Stop:
      mediaPlayer.stop();
      break;
    }
  }
    
      @Override
  public void onPrepared(MediaPlayer mp) {
    mp.start();
  }

  @Override
  public void onCompletion(MediaPlayer mp) {}

  @Override
  protected void onDestroy() {
    super.onDestroy();
    releaseMP();
  }
    
}
    
Листинг 12.2. Класс MediaActivity

package com.example.lab5_4_media;

import java.io.File;
import java.util.ArrayList;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class GalleryActivity extends Activity {
  
  int currentImage=0;
  ArrayList<String> images;
  ImageView imageView;
  TextView nameView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gallery);
  }
  
  @Override
  public void onResume(){
    super.onResume();
    
    currentImage=0;
    
    Log.d("myLogs","onResume cI="+currentImage);
    
    nameView=((TextView)findViewById(R.id.imageName));
    images=new ArrayList<String>();
    
    imageView=((ImageView)findViewById(R.id.image));
    try{
      File imagesDirectory=new File("/sdcard/TrainingMedia/");
      images=searchImage(imagesDirectory);
      updatePhoto(Uri.parse(images.get(currentImage)));
    }catch(Exception e){
      nameView.setText("Ошибка: Папка '/sdcard/TrainingMedia/' не найдена");
      Log.d("myLogs","Ошибка");
    }
  }
  
  @Override
    protected void onPause()
    {
        super.onPause();
        images.clear();
        Log.d("myLogs","onPause cI="+currentImage);
    }
  
  private ArrayList<String> searchImage(File dir){
    ArrayList<String> imagesFinded=new ArrayList<String>();
    for(File f:dir.listFiles()){
      if(!f.isDirectory()){
        String fileExt=getFileExt(f.getAbsolutePath());
        if(fileExt.equals("png") || fileExt.equals("jpg") || fileExt.equals("jpeg")){
          Log.d("myLogs","Файл найден "+f.getAbsolutePath());
          imagesFinded.add(f.getAbsolutePath());
        }
      }
    }
    return imagesFinded;
  }
  
  public static String getFileExt(String filename){
    return filename.substring(filename.lastIndexOf(".") + 1);
  }
  
  public void updatePhoto(Uri uri){
    try{
      nameView.setText((currentImage+1)+"/"+images.size());
      imageView.setImageURI(uri);
    }catch(Exception e){
      nameView.setText("Ошибка загрузки файла");
    }
  }
  
  public void onNext(View v){
    if(currentImage+1<images.size() && images.size()>0){
      currentImage++;
      updatePhoto(Uri.parse(images.get(currentImage)));
    }
  }
  
  public void onPrevious(View v){
    if(currentImage>0 && images.size()>0){
      currentImage--;
      updatePhoto(Uri.parse(images.get(currentImage)));
    }
  }
  

  
}
    
Листинг 12.3. Класс GalleryActivity

package com.example.lab5_4_media;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
      
    OnClickListener btnClick=new OnClickListener() {
      @Override
      public void onClick(View v) {
        Log.d("myLogs",v.getId()+"");
        Click(v.getId());
      }
    };
    ((ImageButton)findViewById(R.id.bMusic)).setOnClickListener(btnClick);
    ((ImageButton)findViewById(R.id.bCamera)).setOnClickListener(btnClick);
    ((ImageButton)findViewById(R.id.bGallery)).setOnClickListener(btnClick);
  }
  protected void Click(int view){
    Intent intent=null;
    Log.d("myLogs",view+"");
    switch (view){
      case R.id.bMusic: intent=new Intent(this,MediaActivity.class);   break;
      case R.id.bGallery: intent=new Intent(this,GalleryActivity.class); break;
      case R.id.bCamera: intent=new Intent(this,CameraActivity.class); break;
      default: break;
    }
    if(intent!=null){
      Log.d("myLogs","Интент = "+intent.toString());
      startActivity(intent);
    }
  }
}
    
Листинг 12.4. Класс MainActivity
Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.