重启后如何使广播接收器工作?

时间:2013-10-16 18:25:03

标签: android broadcastreceiver android-service

我是Android编程新手。我有一个程序,它使用BroacastReciever截取来电。当我启动我的应用程序时,它开始工作。现在问题是当我重新启动我的Android手机时,这个BroadcastReciever不起作用。所以我假设我需要为此做一个服务。但我不知道何时开始服务以及从哪里开始使用BroadcastReciever。

BroadcastReciever代码 -

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" />无效。

此外,没有服务可以这样做吗?请建议一些方法,它可以帮助我拦截电话转接(即使重启后)。

1 个答案:

答案 0 :(得分: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>

此外,您没有使用服务。您正在使用广播接收器。 有关基础知识Application Fundamentals.

,请参阅此页面