【问题标题】:Stopping location updates after an outgoing call is done in android在android中完成拨出电话后停止位置更新
【发布时间】:2014-01-08 19:56:04
【问题描述】:

我是 android 编程新手。所以请帮助我.. 我正在开发一个应用程序,它可以持续监控当前位置。我希望他的应用程序在后台运行,即使用户转到另一个应用程序。当他返回我的应用程序时,他将能够停止位置更新。一切都是在我拨出电话之前工作正常。我无法在拨出电话后删除位置更新..

下面是我的代码..

tb_trackstartstop.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub

            if(isChecked)
            {               
                trackflag=true;                 
                tracklistener(HomeActivity.this);                   
            }
            else
            {
                if(trackflag)
                    trackmlocManager.removeUpdates(trackmlocListener);
                trackflag=false;
                Toast.makeText(HomeActivity.this, "Stopped", Toast.LENGTH_LONG).show();                 
            }               
        }

我的 onpause 和 onresume 代码如下

@Override
protected void onPause()
{
    super.onPause();
    bundle.putBoolean("trackflagState", trackflag);
}


@Override
protected void onResume()
{
    super.onResume();
    trackflag=bundle.getBoolean("trackflagState",false);

}

【问题讨论】:

  • 什么是trackflag 在拨出电话后您返回到您的应用程序?
  • trackflag 的@Darwind 值为 true
  • 你最终进入了onCheckChangedListenerelse 部分吗?
  • @Darwind 实际上我想要的是,如果 trackflag 为真,onCheckChanged 为假,那么我希望停止 locationlistener
  • 是的,我明白 - 这就是为什么问的原因 ;-) trackmlocManager.removeUpdates(trackmlocListener); 曾经打电话吗?

标签: android


【解决方案1】:

使用BroadcastReceiver

在 Manifest 中注册接收者:

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

清单中的权限:

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

接收器类:

public class MyCallReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                        TelephonyManager.EXTRA_STATE_OFFHOOK)) {

            //Unregister the location listener here.
        }

    }
}

希望这会有所帮助。

【讨论】:

  • 感谢您的回答..但是广播接收器适用于来电..我想是的..我希望应用程序在执行拨出电话后正常运行,并且只有在我更改后才应删除位置更新切换按钮的状态。
  • 在意图过滤器中添加&lt;action android:name="android.intent.action.NEW_OUTGOING_CALL" /&gt;。我认为它应该工作。尝试后请告诉我。
  • 上面的代码在MyCallReceiver上给出了一个空指针异常
  • 从哪里获得 NPE? @拉尔
  • NullPointerException in MyCallReceiver@Mystic
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多