edwardzjl 2015-03-04 20:24 采纳率: 0%
浏览 1436

adroid新手,service的一些问题

service类:
public class PhoneListenerService extends Service {

@Override
public IBinder onBind(Intent intent) {
    return null;
}
@Override
public void onCreate() {
    Log.e("TAG", "service onCreate()");
    super.onCreate();
    //电话服务管理
    TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    //监听电话状态
    manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}

private PhoneStateListener listener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
                    super.onCallStateChanged(state, incomingNumber);
        //打印电话状态改变信息
        Log.e("TAG", "onCallStateChanged state = " + state);
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE: 
                Log.e("TAG", "onCallStateChanged state = " + state);
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                Log.e("TAG", "onCallStateChanged state = " + state);
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.e("TAG", "onCallStateChanged state = " + state);
                break;
            default:
                break;
        }

    }

};

}

MainActivity:
public class MainActivity extends Activity {
private Button btnStartListening;
TelephonyManager manager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    btnStartListening = (Button)findViewById(R.id.btnStartListening);
    btnStartListening.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            changeState();

        }
    });

}

public void changeState() {
    if (isServiceRunning(getApplicationContext(),"edwardlol.listenertest.PhoneListenerService")) {
        Log.e("TAG","is running, now stop");
        Intent i = new Intent(getApplicationContext(), PhoneListenerService.class);
        stopService(i);
        btnStartListening.setText("start");
    } else {
        Log.e("TAG","is not running, now start");
        Intent i = new Intent(getApplicationContext(), PhoneListenerService.class);
        startService(i);
        btnStartListening.setText("stop");
    }
}
private boolean isServiceRunning(Context mContext,String className) {
    boolean isRunning = false;
    ActivityManager activityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30);
    if (!(serviceList.size()>0)) {
        return false;
    }
    for (int i=0; i<serviceList.size(); i++) {
        if (serviceList.get(i).service.getClassName().equals(className)) {
            isRunning = true;
            break;
        }
    }
    return isRunning;
}

如上,本想在mainactivity中开始和停止PhoneListenerService
但是停止了服务后打入电话还是能打印log信息,即service中的listener还在工作
而且每条log信息都会出现两次
请教下是什么问题?
刚开始接触android,问题弱请不要笑。。

  • 写回答

3条回答 默认 最新

  • edwardzjl 2015-03-04 20:46
    关注

    老眼昏花了 两个问题已经解决

    评论

报告相同问题?

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?