【问题标题】:Listen to phone state even after boot开机后听手机状态
【发布时间】:2015-02-11 19:57:35
【问题描述】:

在我的应用程序中,我使用Broadcast Receiver 收听电话状态事件(即接听电话、空闲等)。代码如下:

public class PhoneCallreceiver extends BroadcastReceiver {
    private boolean ringing;
    private boolean received;

    public PhoneCallreceiver() {
    }

@Override
public void onReceive(Context context, Intent intent) {
    Log.v("ranjith", "enterted receiver");
    Bundle bundle = intent.getExtras();
    String incomingnumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
    String state = bundle.getString(TelephonyManager.EXTRA_STATE);
    Log.v("ranjapp", state);

    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
        ringing = true;
        received = false;
    } 
}

Manifest.xml

    <receiver
        android:name=".PhoneCallreceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE"/>
        </intent-filter>
    </receiver>

我的问题是我想在设备重新启动后自动启动BroadCast Receiver。我有一个BroadCast Receiver 来收听开机,但我不确定如何启动PhoneCallreceiver BroadCast 接收器。

Manifest.xml

   <receiver
        android:name=".backend.BootStarter"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

代码:

public class BootStarter extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) { 
        PhoneCallreceiver callreceiver = new PhoneCallreceiver();
        context.registerReceiver(callreceiver,new IntentFilter(**what to put here**));
            }
        }

【问题讨论】:

  • BootStarter 是否没有分层或没有正确注册手机状态广播接收器?
  • BootStarter正在启动,但是如何在BootStarter的onReceive中启动PhoneCallReceiver?
  • 您是否尝试将启动完成的意图过滤器添加到您的 .PhoneCallReceiver 中?
  • 如果我这样做,PhonecallReceiver 将在启动后被调用,但只有在收到调用时才会执行代码

标签: android broadcastreceiver phone-state-listener


【解决方案1】:

找到了我的问题的答案,接收phonestate的intentfilter动作是android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED

我更新的代码如下:

public class BootStarter extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) { 
    PhoneCallreceiver callreceiver = new PhoneCallreceiver();
            context.registerReceiver(new PhoneCallreceiver(), new IntentFilter(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED));
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多