私のアプリはシンプルなサービスを持っています。ユーザーが電話をかけたり受信したときにサービスを一時停止したり、通話が終了した後にサービスを再開する必要があります。 TeleListenerクラスから着信中にサービスを一時停止し、通話が終了した後にサービスを再開するにはどうすればよいですか?
public class MyService extends Service {
private static final String TAG = "MyService";
private boolean isRunning = false;
@Override
public void onCreate() {
Log.i(TAG, "Service onCreate");
isRunning = true;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "Service onStartCommand");
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
if (isRunning) {
Log.i(TAG, "Service running");
}
}
stopSelf();
}
}).start();
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
Log.i(TAG, "Service onBind");
return null;
}
@Override
public void onDestroy() {
isRunning = false;
Log.i(TAG, "Service onDestroy");
}}
でMainActivity I - :ここで
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(getApplicationContext(), MyService.class);
startService(intent);
TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
TelephonyMgr.listen(new TeleListener(),
PhoneStateListener.LISTEN_CALL_STATE);
}
class TeleListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(getApplicationContext(), "CALL_STATE_OFFHOOK",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
Toast.makeText(getApplicationContext(), incomingNumber,
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}}
私Serviceクラスファイルである - は:ここに
は次のように私の主な活動が見えています電話の状態を取得することができます。私の問題はTelephonyManagerがCALL_STATE_OFFHOOKに等しいとき、私はMyServiceでを一時停止する必要があるとTelephonyManagerがCALL_STATE_IDLEに等しいときに、私はあなたがメソッドをonCallStateChanged使用する必要がたMyService
私はすでにそれらを宣言しています。私はCALL_STATE_OFFHOOKとCALL_STATE_IDLEでサービスを一時停止し、再開する必要があります。 – Karthik
正常に動作しますが、アプリケーションが開いているときにのみ動作しますが、サービスのように常に動作する必要があります。 – Karthik