2013-05-29 36 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以查看輸出結果!否則,我猜你的代碼可能正常運行。