Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 广播接收器未启动服务_Java_Android_Android Emulator_Android Manifest - Fatal编程技术网

Java 广播接收器未启动服务

Java 广播接收器未启动服务,java,android,android-emulator,android-manifest,Java,Android,Android Emulator,Android Manifest,提前感谢您的帮助。我对Android和编程世界还是很陌生,我一直在寻找一些指导。我正在尝试让一条短信被监听,然后启动一个服务在后台运行。我知道广播接收器正在工作,因为当我向模拟器发送文本时,会弹出一个Toast通知,但仅此而已。在那之后,我再也没有收到我在服役期间的祝酒词 这是我的广播接收器 import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.

提前感谢您的帮助。我对Android和编程世界还是很陌生,我一直在寻找一些指导。我正在尝试让一条短信被监听,然后启动一个服务在后台运行。我知道广播接收器正在工作,因为当我向模拟器发送文本时,会弹出一个Toast通知,但仅此而已。在那之后,我再也没有收到我在服役期间的祝酒词

这是我的广播接收器

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

public class MyBroadcastReceiver extends BroadcastReceiver {
protected String className = this.getClass().getName();
protected int toastLength = Toast.LENGTH_SHORT;

@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();

    Object messages[] = (Object[]) bundle.get("pdus");
    SmsMessage smsMessage[] = new SmsMessage[messages.length];
    for (int n = 0; n < messages.length; n++) {
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
    }

    // show first message
    Toast toast = Toast.makeText(context, "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
    toast.show();
    Intent serviceIntent = new Intent(context, MyService.class);
    serviceIntent.setAction("SMS.example.MyService");
    context.startService(serviceIntent);
    }
}
导入android.content.BroadcastReceiver;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.content.ServiceConnection;
导入android.os.Bundle;
导入android.telephony.gsm.sms消息;
导入android.widget.Toast;
公共类MyBroadcastReceiver扩展了BroadcastReceiver{
受保护字符串className=this.getClass().getName();
受保护的int toastLength=Toast.LENGTH\U SHORT;
@凌驾
公共void onReceive(上下文、意图){
Bundle=intent.getExtras();
对象消息[]=(对象[])bundle.get(“PDU”);
SmsMessage SmsMessage[]=新SmsMessage[messages.length];
对于(int n=0;n
我会弹出toast通知,但它在收到文本后不会启动服务。以下是该服务的代码:

public class MyService extends Service {
final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
BroadcastReceiver SMSReceiver = new BroadcastReceiver(){
protected String className = this.getClass().getName();
protected int toastLength = Toast.LENGTH_SHORT;    

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, className, toastLength).show();
        Log.i("INCOMINGSMSRECEIVER", intent.getAction());

        if (intent.getAction().equals(SMS_RECEIVED)) {
            SmsManager sms = SmsManager.getDefault();

            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i=0; i<pdus.length; i++)
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

                for (SmsMessage message : messages) {
                    String msg = message.getMessageBody();
                    String to = message.getOriginatingAddress();
                    //sms.sendTextMessage(to, null, "Got It" + msg, null, null);
                    Log.i("INCOMINGSMSRECEIVER", "SMS received."); 

                }
            }
        }           
    }
};

    //@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate();

    Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();
    IntentFilter filter = new IntentFilter(SMS_RECEIVED);       
    registerReceiver(SMSReceiver, filter);

}
}
公共类MyService扩展服务{
最后一个字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
BroadcastReceiver SMSReceiver=新的BroadcastReceiver(){
受保护字符串className=this.getClass().getName();
受保护的int toastLength=Toast.LENGTH\U SHORT;
@凌驾
公共void onReceive(上下文、意图){
makeText(上下文、类名、toastLength).show();
Log.i(“INCOMINGSMSRECEIVER”,intent.getAction());
if(intent.getAction().equals(SMS_已接收)){
SmsManager sms=SmsManager.getDefault();
Bundle=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
SmsMessage[]messages=新SmsMessage[pdus.length];

对于(int i=0;i我本以为我会为其他人保留此代码,但我发现了问题所在。我没有为onCreate()弹出toast,而是为onStart()弹出toast方法将弹出祝酒词!希望这对其他人有帮助。

我原以为我会为其他人保留此代码,但我发现了问题。我没有为onCreate()弹出祝酒词,但onStart()方法将弹出祝酒词!希望这对其他人有帮助。

我认为这是因为您没有使用onStart命令() 请阅读以下内容:


请注意,onStart()已被弃用,应改用onStartCommand()。

我认为这是因为您不使用onStartCommand() 请阅读以下内容:

请注意,onStart()已弃用,应改用onStartCommand()

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="SMS.example"
  android:versionCode="1"
  android:versionName="1.0">
   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
   <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
   <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
   <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">    
<receiver android:name=".MyBroadcastReceiver" android:enabled="true">
    <intent-filter>
              <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter>
</receiver> 
<service android:name=".MyService" android:enabled="true">
    <intent-filter>
      <action android:name="SMS.example.MyService" />    
    </intent-filter>
</service>