2013-05-29 39 views
0

我是新来的Android,我创建的意图是这样的 -听意图在后台

<receiver android:name=".IncommigCallListener" > 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
</receiver> 
<receiver android:name=".OutgoingCallReciever" > 
     <intent-filter> 
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
     </intent-filter> 
</receiver> 

现在我创造了这样的服务 -

<service 
     android:name=".CallLogger" 
     android:exported="false"/> 

CallLogger

public class CallLogger extends IntentService { 
    public CallLogger(String name) { 
     super(name); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("service started"); 
    } 
} 

我不想在我的应用程序中有任何活动,我只想启动该服务,以便它可以w ork在背景中,并收到PHONE_STATENEW_OUTGOING_CALL意图。

当我启动此应用程序时,它不会记录PHONE_STATENEW_OUTGOING_CALL意图上的任何内容。

如何在不使用任何活动的情况下在后台启动服务?

编辑:

public class OutgoingCallReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context ctx, Intent intent) { 
     String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
    } 
} 

public class IncommigCallListener extends PhoneStateListener { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
     case TelephonyManager.CALL_STATE_RINGING: 
      String incommingCallNumber = incomingNumber; 
      System.out.println("incomming call : " + incomingNumber); 
      break; 
     } 
    } 
} 

回答

0

刚开始在你的广播接收器的方法的onReceive服务。当您在AndroidManifist中注册BroadcastReceiver时,即使应用程序未运行,它也会始终监听广播(操作系统将为您运行)。

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Intent service = new Intent(context, MyService.class); 
    context.startService(service); 
    } 
    } 

编辑 要启动服务,在启动完成,你可以做这样的事情。

1)添加权限您Manifist:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

2)完成引导作用注册您的广播接收器。

<receiver android:name="com.example.BootBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

3)在BootBroadcastReceiver.java:

public class BootBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent serviceIntent = new Intent(context, MyService.class); 
     context.startService(serviceIntent); 
    } 
} 
1

你应该能够做这样的事情在你的接收机。

public class OutgoingCallReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context ctx, Intent intent) { 
     String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     Intent service = new Intent(context, CallLogger.class); 
     context.startService(service); 
    } 
} 

您需要创建一个intent并调用startService()来启动服务。

同样对于它值得你应该走出System.out.println habbit的使用Log.d(tag,msg)打印调试信息到logcat。如果您想在不同的频道中打印,则可以将d切换为其他字母。

0

为什么没有打印只是由于System.out.println在Android不起作用的问题!你认为后台进程在哪里“print”这个东西?

您需要将其更改为Log.d(tag, msg),然后检查logcat以查看输出结果!否则,我猜你的代码可能正常运行。