2012-11-10 101 views
2

我一直在努力解決這個問題。 我有一個廣播接收器,假設接收短信',它是這樣做的,但我想在我的服務中使用一個方法/函數,目的是最終使它成爲一個前臺服務,永遠不會關閉。 的廣播接收器看起來是這樣的:來自broadcastReceiver的服務呼叫功能

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 

public class SmsReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null;    
     if (bundle != null) 
     { 
     //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];    
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
      } 
     //want to send msgs[] to SmsService 
     }       
    } 
} 

在清單爲使其得到我已經加入:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.BROADCAST_SMS"/> 
<uses-permission android:name="android.permission.READ_SMS"/> 
<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name=".SmsReceiver" > 
     <intent-filter> 
      <action android:name= "android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
    <service android:name="SmsService"></service> 
</application> 

回答

3
Intent myIntent = new Intent(context, SmsService.class); 
myIntent.putExtra("msg", msgs); 
context.startService(myIntent); 
+0

我處理這樣使用它的服務的權利?很難爲我測試,因爲應用程序在收到文本後崩潰,因此可以看到發生了什麼問題Bundle bundle = service.getExtras(); SmsMessage [] messages =(SmsMessage [])bundle.get(「msg」); \t \t handleReceivedSMS(messages); –

+0

是的。我相信你的應用崩潰了,因爲你的服務在清單中被列爲「SmsService」而不是「.SmsService」。 –

+0

嘗試使用.SmsService,仍然存在,但我可以看到有1個主線程和2個線程綁定器可能在那裏我犯了一個錯誤無論如何這是一個不同的問題,我跨過代碼,它確實激發了我想要的功能,只是啓動服務的返回部分中斷。幫助羅賓幫助 –