实现BroadcastReceiver即服务 - Android

问题描述:

我想实现一旦安装它就永远不会被终止的应用程序,并监视收到的每个收到的SMS。实现BroadcastReceiver即服务 - Android

我想在我的应用程序中实施服务,它拥有BroadcastReciever的实例。

你能帮我通过一个例子来实现吗?为了达到这个目的,这是否是正确的OOD?

Thx !!

+1

没有什么,不能由OS – tyczj

1.您的解决方案仅适用于您。没有服务是没有被系统杀死的。

2.You需要一个箱子到BroadCastReciver读取每个传入消息。请看看下面的代码注册传入SMS读取器类,清单

3.当您收到的BroadCastReciver触发您需要从BroadCastReciver和通呼叫服务SMS要进一步处理的服务数据。

4.这样你就不用担心服务被System杀死了。

AndroidManifest.xml文件细节:在AndroidManifest

  1. 申报接收机


    在AndroidManifest
  1. 给读取短信权限

  2. 为AndroidManifest.xml文件完整代码:

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.androidexample.broadcastreceiver" 
        android:versionCode="1" 
        android:versionName="1.0" > 
    
        <application 
         android:allowBackup="true" 
         android:icon="@drawable/ic_launcher" 
         android:label="@string/app_name" 
         android:theme="@style/AppTheme" > 
         <activity 
          android:name="com.androidexample.broadcastreceiver.BroadcastNewSms" 
          android:label="@string/app_name" > 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
    
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         </activity> 
    
         <receiver android:name="com.androidexample.broadcastreceiver.IncomingSms"> 
          <intent-filter> 
           <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
          </intent-filter> 
         </receiver> 
    
        </application> 
        <uses-sdk 
         android:minSdkVersion="8" 
         android:targetSdkVersion="17" /> 
    
        <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
        <uses-permission android:name="android.permission.READ_SMS" /> 
        <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
    
    </manifest> 
    

    IncomingSms.java文件的详细信息:

    I have made broadcast event reciever in this file 
    
    1. Created class IncomingSms with extends BroadcastReceiver class 
    
    
    
    public class IncomingSms extends BroadcastReceiver 
    
    
         2. Get the object of SmsManager to find out received sms details 
    
    
    
    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 
    
    
         3. Create method receiver() 
    
    
    
    public void onReceive(Context context, Intent intent) 
    
    
         4. Get/Read current Incomming SMS data 
    
    
    
    // Retrieves a map of extended data from the intent. 
    final Bundle bundle = intent.getExtras(); 
    
    try { 
    
        if (bundle != null) { 
    
         final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
    
         for (int i = 0; i < pdusObj.length; i++) { 
    
          SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
          String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 
    
          String senderNum = phoneNumber; 
          String message = currentMessage.getDisplayMessageBody(); 
    
          Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message); 
    
    
          // Show alert 
          int duration = Toast.LENGTH_LONG; 
          Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration); 
          toast.show(); 
    
         } // end for loop 
         } // bundle is null 
    
    } catch (Exception e) { 
        Log.e("SmsReceiver", "Exception smsReceiver" +e); 
    
    } 
    

    ======= ======================================= ================================================== =

    ​​

    Incomming SMS Broadcast Receiver - Android Example

开始=>
+0

被杀死“4.In这样你就不需要担心服务是由系统打死。” - 你的意思是只要这个应用程序存在,即使系统重新启动(不是工厂重置)服务将保持活着状态,而不需要在系统完成启动后再次运行我的应用程序? – Batman

+0

不,这意味着你需要捕捉每个'SMS',所以每当有传入的'sms'来到'BroadcasteReciver'触发器,然后你'启动服务'来完成你的任务。如果系统终止你的服务,它会在任何新的'SMS'出现时重新启动。 –

+0

好的,那么即使在手机启动后我还没有运行我的已安装应用程序,BroadcastReciver的功能仍然存在? – Batman