MediaPlayer.OnCompletionListener and View.OnClickL

2019-07-19 05:02发布

问题:

I am currently trying:

extends Activity implements MediaPlayer.OnCompletionListener 
extends Activity implements View.OnClickListener 

at the same time and its not working or rather im not sure how to implement it...how would I go about doing this?

edit: maybe it will help if I show you guys what I have now and its not working:

package com.vamp6x6x6x.rusty;

import java.io.IOException;

import com.vamp6x6x6x.rusty.R;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;

public class rustyactivity extends Activity implements MediaPlayer.OnCompletionListener, View.OnClickListener {
    /** Called when the activity is first created. */

    ImageView display;
    int toPhone;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);

        display = (ImageView) findViewById(R.id.IVDisplay);
        ImageView image1 = (ImageView) findViewById(R.id.IVimage1);
        ImageView image2 = (ImageView) findViewById(R.id.IVimage2);
        ImageView image3 = (ImageView) findViewById(R.id.IVimage3);
        ImageView image4 = (ImageView) findViewById(R.id.IVimage4);
        ImageView image5 = (ImageView) findViewById(R.id.IVimage5);
         Button setWall = (Button) findViewById(R.id.bSetWallpaper);

        toPhone = R.drawable.guy1;

        image1.setOnClickListener(this);
        image2.setOnClickListener(this);
        image3.setOnClickListener(this);
        image4.setOnClickListener(this);
        image5.setOnClickListener(this);
        setWall.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        switch (v.getId()) {

        case R.id.IVimage1:
        display.setImageResource(R.drawable.guy1);
        toPhone = R.drawable.guy1;
        break;
        case R.id.IVimage2:
            display.setImageResource(R.drawable.guy2);
            toPhone = R.drawable.guy2;
            break;
        case R.id.IVimage3:
            display.setImageResource(R.drawable.guy3);
            toPhone = R.drawable.guy3;
            break;
        case R.id.IVimage4:
            display.setImageResource(R.drawable.guy4);
            toPhone = R.drawable.guy4;
            break;
        case R.id.IVimage5:
            display.setImageResource(R.drawable.guy5);
            toPhone = R.drawable.guy5;
            break;

        case R.id.bSetWallpaper:

            Bitmap whatever = BitmapFactory.decodeStream(getResources().openRawResource(toPhone));
               try{
                   getApplicationContext().setWallpaper(whatever);
               }catch(IOException e){
                   e.printStackTrace();
               }
        }

        Button ending = (Button) findViewById(R.id.theme);
        ending.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playSound(R.raw.theme);
            }       
 });
    }
        private void playSound(int resId) {
            MediaPlayer mp = MediaPlayer.create(this, resId);
            mp.setOnCompletionListener(this);
            mp.start();
        }

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub

    }
    }

回答1:

extends Activity implements MediaPlayer.OnCompletionListener, View.OnClickListener 

Then you need to register your activity.

mediaPlayer.setOnCompletionListener(this);
someView.setOnClickListener(this);

Where 'this' is the activity you just created



回答2:

Stick this code right up at the start as part of the onCreate():

MediaPlayer mp = MediaPlayer.create(this, pathToTheFile, web, whereverTheSoundIs);
mp.setOnCompletionListener(this);
mp.start();

If that doesn't work, then you have a problem locating the sound file, or it is in the wrong format.

From experience, cut things down to simple parts and try and get each part working first before moving on.

Another thing I do is put comments after each } for example: '} // End of Case'

Oh, almost forgot, in the onCompletion you might like to close off the media player with

mp.release();

Cheers



回答3:

try this! it works to me, i hope it helps you:
main:

package com.hairdryer;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;

import com.hairdryer.ServiceReproductor;

public class Reproductor extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageButton btnInicio = (ImageButton) findViewById(R.id.on);
        ImageButton btnFin = (ImageButton) findViewById(R.id.off);
        btnInicio.setOnClickListener(this);
        btnFin.setOnClickListener(this);
    }

    public void onClick(View src) {
        ImageButton btnInicio = (ImageButton) findViewById(R.id.on);

        switch (src.getId()) {
        case R.id.on:
            btnInicio.setBackgroundResource(R.drawable.on2);
            startService(new Intent(this, ServiceReproductor.class));
            break;
        case R.id.off:
            stopService(new Intent(this, ServiceReproductor.class));
            btnInicio.setBackgroundResource(R.drawable.on);
            break;
        }
    }
}

ServiceReproductor.java:

package com.hairdryer;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;
import android.widget.Toast;


public class ServiceReproductor extends Service implements OnCompletionListener{
    private MediaPlayer player;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        //Toast.makeText(this, "Servicio Creado", Toast.LENGTH_LONG).show();    
        player = MediaPlayer.create(this, R.raw.inicio);
        player.setOnCompletionListener(this);

    }

    @Override
    public void onDestroy() {
        //Toast.makeText(this, "Servicio Detenido", Toast.LENGTH_LONG).show();
        player.stop();
    }

    @Override
    public void onStart(Intent intent, int startid) {
        //Toast.makeText(this, "Servicio Iniciado", Toast.LENGTH_LONG).show();
        player.start();
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        player = MediaPlayer.create(this, R.raw.secador);
        player.start();
        player.setLooping(true);
        // TODO Auto-generated method stub

    }   

}

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/secador"
        />

    <ImageButton    android:id="@+id/off"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@drawable/off"

        />
    <ImageButton    android:id="@+id/on"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/off"
        android:layout_marginRight="10dp"
        android:background="@drawable/on"

        />

</RelativeLayout>