2014-04-23 26 views
1

我需要在函数killCall中使用Context对象,但我不知道如何将上下文对象传递给KillCall,你能帮我吗?谢谢!如何在BroadcastReceiver中使用IntentService时传递上下文var?

public class ReceiverCall extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

       Intent msgIntent = new Intent(context, InternetServerCall.class);  
       context.startService(msgIntent); 
    } 

} 


public class InternetServerCall extends IntentService{ 

    public InternetServerCall(String name) { 
     super("InternetServerCall"); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) {  
     HandleCall.killCall(context); //Need context 
    } 

} 


public class HandleCall { 

    public static boolean killCall(Context context) { 
     try { 
      .... 
      Toast.makeText(context, "PhoneStateReceiver kill incoming call Ok",Toast.LENGTH_SHORT).show(); 

     } catch (Exception ex) { // Many things can go wrong with reflection calls 
      return false; 
     } 
     return true; 
    } 

} 

回答

3

您可以通过执行InternetServerCall.this得到ContextInternetServerCall。这是因为所有AndroidComponents覆盖Context类,他们是IntentService

您还可以使用getApplicationContext()转换为IntentService以获取上下文。你可以阅读我的另一个类似的答案Pass a Context an IntentService


但你无法显示IntentServiceToast直接,因为它需要UI线程,但IntentService跑入后台线程。您需要使用Handler显示吐司,像下面的例子

public class TestService extends IntentService { 


    private Handler handler; 

    public TestService(String name) { 
     super(name); 
     // TODO Auto-generated constructor stub 
    } 

    public TestService() { 
      super("TestService"); 
    } 


    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     handler = new Handler(); 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
      // TODO Auto-generated method stub 
     handler.post(new Runnable() { 
       @Override 
       public void run() {   
          Toast.makeText(getApplicationContext(), "Handling Intent..", Toast.LENGTH_LONG).show(); 
       } 
      }); 
    } 
} 
1

IntentServiceContext子类,所以你可以在this传:

@Override 
protected void onHandleIntent(Intent intent) {  
    HandleCall.killCall(this); 
} 
相关问题