0

我一直在研究一个应用程序,该应用程序用于接收短信并使用广播接收器来显示一个Toast,并且我有一个没有目的的活动,构建apk并在我的手机上运行,​​应用程序在收到短信时没有响应(没有Toast显示),尽管剩余的代码与以前相同。任何人都可以帮助我,我很困难,不能帮助自己阅读数百个答案。我研究了我应该创建一个服务,但仍然没有吐司出现。下面是我的代码。即使不希望自动杀死活动,我的应用程序中也不能有任何GUI。如何在没有GUI的情况下通过BroadcastReceiver使用Android服务接收短信

BroadcastReceiver.java

package com.test.testservice; 

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



public class SmsReceiver extends BroadcastReceiver { 

    public static final String SMS_BUNDLE = "pdus"; 
    private static final String LOG = "SmsBroadcastReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle intentExtras = intent.getExtras(); 
     if (intentExtras != null) { 
      Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE); 


      if (sms != null) 
      { 
       String smsMessageStr = ""; 

       for (int i = 0; i < sms.length; ++i) 
       { 
        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]); 

        String smsBody = smsMessage.getMessageBody().toString(); 
        String address = smsMessage.getOriginatingAddress(); 

        smsMessageStr += "SMS From: " + address + "\n"; 
        smsMessageStr += smsBody + "\n"; 
       } 
       Toast.makeText(context, smsMessageStr, Toast.LENGTH_LONG).show(); 
       //MyService objService=new MyService(); 
       //objService.startService(intent); 
       //objService.stopService(intent); 


       Intent myIntent = new Intent(context, MyService.class); 
       //myIntent.putExtra("Sender", Sender); 
       //myIntent.putExtra("Fullsms", Fullsms); 
       context.startService(myIntent); 


      } 
     } 
    } 
} 

MyService.java

package com.test.testservice; 

import android.app.Service; 
import android.content.ComponentName; 
import android.content.Intent; 
import android.os.IBinder; 
import android.support.annotation.Nullable; 
import android.util.Log; 
import android.widget.Toast; 

public class MyService extends Service { 
    private static final String LOG = "MyService"; 
    @Override 
    public boolean stopService(Intent name) { 
     if (super.stopService(name)) 
     { 
      Toast.makeText(this,"HELLO stopService",Toast.LENGTH_LONG).show(); 
      Log.i(LOG, "stopService"); 
      return true; 
     } 
     else return false; 
    } 

    @Override 
    public ComponentName startService(Intent service) { 
     return super.startService(service); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Toast.makeText(this,"HELLO onCreate",Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     Toast.makeText(this,"HELLO onStart",Toast.LENGTH_LONG).show(); 
    } 
} 

的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

    package="com.test.testservice"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 


     <receiver android:name=".SmsReceiver" android:enabled="true" android:exported="true"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
       <action android:name="android.intent.action.REBOOT"/> 
      </intent-filter> 
     </receiver> 

    </application> 

    <service android:name="com.test.testservice.service.MyService"/> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.WRITE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
</manifest> 
+0

我可以在没有任何GUI的情况下创建服务并将其安装到手机上吗?然后创建一个单独的应用程序来运行该服务,一旦服务运行我卸载第二个应用程序? –

回答

0

UNL如果您正在创建自己的手机,或者您自己的自定义ROM,则需要进行该活动。当您的应用第一次安装时,您的BroadcastReceiver将不起作用。只有当用户启动您的活动(或其他使用明确的Intent来启动您的某个组件)时,它才会开始工作。

我不能有任何GUI在我的应用程序

那么你的应用程序不会在Android 3.1+设备,从而弥补了广大大多数Android设备生态系统的正常工作。

相关问题