BroadcastReceiver中调用Service

首先是代码:

package com.larry.msglighter;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import android.app.Activity;

public class MyBroadcastReceiver extends BroadcastReceiver {

    // action 名称
    String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED" ;
 
    public void onReceive(Context context, Intent intent) {
 
       if (intent.getAction().equals( SMS_RECEIVED )) {
           // 相关处理 : 地域变换、电量不足、来电来信;
           Toast.makeText(context, "来短信了", Toast.LENGTH_LONG).show();
           
           Intent serIntent = new Intent();
           serIntent.setClass(context, ScreenService.class);
           context.startService(serIntent);
           
       }
    }
}
View Code

用Intent的setClass方法在BroadcastReceiver的onReceive()方法中调用一个Service,第一个参数写成“MyBroadcastReceiver.this”是报错的,或许是因为这个intent是在

public void onReceive(Context context, Intent intent) {}

里面调用的,所以找不到this?

解决办法是先把第一个参数改成context,  just like onReceive()的第一个参数;再把startService(serIntent);改成context.startService(serIntent);。

神奇的context!到底啥意思。。先不讨论了!!

----------------------------------------

另外是一个Intent写法的问题:

这样写:

           Intent serIntent = new Intent();
           serIntent.setClass(context, ScreenService.class);
           context.startService(serIntent);

与这样写:

      Intent serIntent = new Intent(context,ScreenService.class);
        context.startService(serIntent);

目测是一个效果。

先到这。

原文地址:https://www.cnblogs.com/larrylawrence/p/3421629.html