0

我编写了一个使用 BroadcastReceiver 拦截来电的程序。当我启动我的应用程序时,它开始工作。现在的问题是当我重新启动我的 android 手机时,这个 BroadcastReceiver 不起作用。所以我假设我需要为此提供服务。但是不知道什么时候启动服务,从哪里启动BroadcastReceiver。

广播接收器代码 -

public class CallInterceptor extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Service started", Toast.LENGTH_LONG).show();
    Bundle extras = intent.getExtras();
    if (extras != null) {
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        Toast.makeText(context, "Phone is " + state, Toast.LENGTH_LONG).show();
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            String phoneNumber = extras
                    .getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
            Toast.makeText(context, "Call from " + phoneNumber, Toast.LENGTH_LONG).show();
            //sendSMS(phoneNumber);

            //toggle ringer mode
            AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            toggleMode(am);
        }

    }

}

AndroidManifest 文件 -

<receiver android:name="com.nagarro.service.CallInterceptor" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                </action>
            </intent-filter>
        </receiver>

我不认为<action android:name="android.intent.action.BOOT_COMPLETED" />是工作。

另外,是否可以在没有服务的情况下做到这一点?请建议可以帮助我随时拦截呼叫的方法(即使在重新启动后)。

4

1 回答 1

1

您不正确地关闭了您的第一个操作标签。您的接收器部分应如下所示:

<receiver android:name="com.nagarro.service.CallInterceptor" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

此外,您没有使用服务。您正在使用广播接收器。请参阅此页面了解基本应用程序基础知识。

于 2013-10-16T19:04:10.190 回答