Почему метод onreceive() приемника Broadcast не вызван?


1

Я начинаю разработку Android. Я пытаюсь сделать приложение планировщика SMS. Метод onReceive() приемника широковещательного приемника приложения не вызван? Ниже приведен мой исходный код. Я рассмотрел некоторые другие ссылки, такие как Basic Android alarm app, Broadcast Receiver's onReceive() method not being called. Пожалуйста, я хотел бы знать, где я ошибся. Спасибо заранее.

  1. Homepage.java

    public class Homepage extends Activity 
        { 
        public EditText get_number; 
        public EditText text_box; 
        public String search_string,text_box_buffer; 
        public Bundle bundle; 
        public Intent mesg_intent; 
        public PendingIntent pending_intent; 
        public AlarmManager alarmManager; 
        TimePickerFragment newFragment = new TimePickerFragment(); 
    
        public void showTimePicker(View view) 
        { 
         newFragment.show(getFragmentManager(),"timepicker"); 
        } 
    
        public void messageSave(View view) 
        { 
         search_string=get_number.getText().toString(); 
         text_box_buffer=text_box.getText().toString(); 
         bundle.putCharSequence("number",search_string); 
         bundle.putCharSequence("message", text_box_buffer); 
         mesg_intent.putExtras(bundle); 
         pending_intent = PendingIntent.getService(this,0,mesg_intent,0); 
         alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
         alarmManager.set(AlarmManager.RTC_WAKEUP,newFragment.getTime(),pending_intent); 
         Toast.makeText(this,"SMS scheduled to be sent",Toast.LENGTH_SHORT).show(); 
        } 
    
    
        @Override 
        public void onCreate(Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_homepage); 
         get_number = (EditText) findViewById(R.id.contacts_search); 
         text_box = (EditText) findViewById(R.id.text_box); 
         bundle = new Bundle(); 
         mesg_intent = new Intent(this,Alarmservice.class); 
    
        } 
    
    
        @Override 
        public boolean onOptionsItemSelected(MenuItem item) 
        { 
    
         int id = item.getItemId(); 
         if (id == R.id.action_settings) 
         { 
          return true; 
         } 
    
         return super.onOptionsItemSelected(item); 
        } 
    

    }

  2. TimepickerFragment.java

    public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener 
    

    { общественный календарь с = Calendar.getInstance(); public int hour = c.get (Calendar.HOUR_OF_DAY); public int minute = c.get (Calendar.MINUTE);

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
        return new TimePickerDialog(getActivity(),this,hour,minute,DateFormat.is24HourFormat(getActivity())); 
    } 
    
    public void onTimeSet(TimePicker view, int hourOfDay, int minuteset) 
    { 
        hour=hourOfDay; 
        minute=minuteset; 
    } 
    public long getTime() 
    { 
        long time_ret = new GregorianCalendar().getTimeInMillis()+((hour*60*60*1000)+(minute*60*1000)); 
        return time_ret; 
    } 
    

    }

  3. Alarmservice.java

    public class Alarmservice extends BroadcastReceiver 
    { 
    @Override 
    public void onReceive(Context context,Intent intent_local) 
    { 
        try { 
         Bundle received_bundle = intent_local.getExtras(); 
         String number = (String) received_bundle.getCharSequence("number"); 
         String message = (String) received_bundle.getCharSequence("message"); 
         SmsManager smsManager = SmsManager.getDefault(); 
         smsManager.sendTextMessage(number, null, message, null, null); 
         Toast.makeText(context,"SMS successfully sent",Toast.LENGTH_SHORT).show(); 
        } 
        catch (Exception e) 
        { 
         Toast.makeText(context,"SMS failed",Toast.LENGTH_SHORT).show(); 
        } 
    } 
    

    }

  4. manifest.xml

    <uses-sdk 
        android:minSdkVersion="16" 
        android:targetSdkVersion="24" /> 
    
    <uses-permission android:name="android.permission.SEND_SMS"/> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
    
    <application 
        android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        android:label="@string/app_name" 
        android:theme="@style/AppTheme" > 
        <activity 
         android:name=".Homepage" 
         android:label="@string/app_name" 
         android:screenOrientation="sensor" > 
         <intent-filter> 
          <action android:name="android.intent.action.MAIN" /> 
    
          <category android:name="android.intent.category.LAUNCHER" /> 
         </intent-filter> 
        </activity> 
        <receiver 
         android:process=":remote" 
         android:name=".Alarmservice"/> 
    </application> 
    

  0

и как же вы проявляете как выглядит? 12 окт. 152015-10-12 13:17:49

+2

попробуйте 'PendingIntent.getBroadcast' вместо' PendingIntent.getService' 12 окт. 152015-10-12 13:21:13

  0

@StefanBeike добавил файл манифеста 12 окт. 152015-10-12 13:28:13

1

Проблема с созданием намерения, сделать это так:

mesg_intent = new Intent(this, Alarmservice.class); 
mest_intent.putExtras(bundle); 
pending_intent = PendingIntent.getBroadcast(this, 0, mesg_intent, PendingIntent.FLAG_UPDATE_CURRENT); 
  0

Он по-прежнему не работает. 12 окт. 152015-10-12 15:03:11