2013-02-15 3 views
3

Я действительно новичок в Android и Java. Я делаю приложение, и у него есть медиа-сервис, и я хочу, чтобы носители были остановлены или приостановлены при входящих вызовах. Это мой код медиа-сервисЗакрытие службы поддержки Android при входящем вызове

общественного класса ServiceMusic расширяет службы {

MediaPlayer music; 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    music.stop(); 
    music.release(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 

    if (music !=null) 
    music.stop(); 

    music = MediaPlayer.create(ServiceMusic.this, R.raw.music); 
    music.start(); 
    music.setLooping(true); 
} 

}

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

ответ

4

вы должны создать приемник для входящего вызова, как показано ниже:

public class call_reciver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     String number = ""; 
     Bundle bundle = intent.getExtras(); 


     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      // Phone is ringing 
      number = bundle.getString("incoming_number"); 


     } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
      // Call received 

     } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      // Call Dropped or rejected 


     } 


    } 

манифеста положить это:

<receiver android:name=".call_reciver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

Разрешение:

<uses-permission android:name="android.permission.READ_PHONE_STATE" > 
    </uses-permission> 

сделать переменную медиаплеера static & globale, в reciver call another serv лед, чтобы проверить, работает ли ваш медиаплеер или нет. если он запущен, остановите его. вы можете использовать также тот же сервис.

вы должны начать услуги от приемника:

Intent myIntent = new Intent(context, Service_temp.class); 
     context.startService(myIntent); 

в использовании услуг это:

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     return super.onStartCommand(intent, flags, startId); 
    } 

проверки отредактированный анс:

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

основного класс активности:

package com.example.androidmediaplay; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @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; 
    } 

    public void clickBtn(View v) { 
     if (v.getId() == R.id.button1) { 
      UtilClass.playing = true; 
      Intent i = new Intent(MainActivity.this, 
        BackgroundSoundService.class); 
      startService(i); 
     } 
    } 

} 

BackgroundSoundService класс:

package com.example.androidmediaplay; 

import java.io.File; 

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Environment; 
import android.os.IBinder; 
import android.util.Log; 

public class BackgroundSoundService extends Service { 

    private static final String TAG = null; 
    MediaPlayer player; 

    public IBinder onBind(Intent arg0) { 

     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     player = MediaPlayer.create(
       this, 
       Uri.fromFile(new File(Environment.getExternalStorageDirectory() 
         + "/Songs/test.mp3"))); 
     player.setLooping(true); // Set looping 
     player.setVolume(100, 100); 

    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("onStartCommand", "onStartCommand"); 
     if (player.isPlaying()) { 
      player.pause(); 
      UtilClass.pause = true; 

      Log.e("onStartCommand pause", "onStartCommand pause"); 
     } else { 
      UtilClass.pause = false; 
      player.start(); 
     } 

     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
    } 

    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    } 

    public void onPause() { 

    } 

    @Override 
    public void onDestroy() { 
     UtilClass.playing = false; 
     player.stop(); 
     player.release(); 
    } 

    @Override 
    public void onLowMemory() { 

    } 

} 

вызов класса приемника:

package com.example.androidmediaplay; 

import android.app.ActivityManager; 
import android.app.ActivityManager.RunningServiceInfo; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.telephony.TelephonyManager; 
import android.util.Log; 

public class call_reciver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     String number = ""; 
     Bundle bundle = intent.getExtras(); 

     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      // Phone is ringing 
      number = bundle.getString("incoming_number"); 
      Log.e("incoming_number", "incoming_number"); 
      _stopServices(context); 

     } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
      // Call received 

     } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      // Call Dropped or rejected 
      _stopServices(context); 
     } 

    } 

    private void _stopServices(Context con) { 
     // TODO Auto-generated method stub 
     if (UtilClass.playing == true) { 
      Log.e("start services", "start services"); 
      Intent i = new Intent(con, BackgroundSoundService.class); 
      con.startService(i); 
     } else { 
      Log.e("start not services", "start not services"); 
     } 
    } 

} 

экстра с Ласс для статического члена:

package com.example.androidmediaplay; 

public class UtilClass { 

    public static Boolean playing = false; 
    public static boolean pause = false; 
} 

в последнем файле манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.androidmediaplay" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.androidmediaplay.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service 
      android:name=".BackgroundSoundService" 
      android:enabled="true" > 
     </service> 

     <receiver android:name=".call_reciver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

Весь код работает на моем конце. пожалуйста, проверьте его и скажите мне.

+0

Благодарим вас за помощь, но я не знал, как сделать переменную музыки глобальной. Я действительно новичок в java и android. Я буду признателен, если вы сможете помочь мне больше с кодом, потому что я немного запутался в том, как вы мне сказали.большое спасибо :) – user2044626

+0

проверить мой отредактированный ан, полный код. –

+1

Ты потрясающий, большое спасибо, большой палец и лучший ответ. С наилучшими пожеланиями – user2044626

Смежные вопросы