当前位置: 首页 > 知识库问答 >
问题:

为什么没有调用广播接收器的onreceive()方法?

蒲昊
2023-03-14

我是android开发的初学者。我正在尝试制作一个SMS计划程序。我的应用程序的广播接收器的onReceive()方法没有被调用?下面给出了我的源代码。我看了一些其他的链接,像基本的Android报警应用程序,广播接收器的onReceive()方法没有被调用请,我想知道我哪里做错了。提前谢谢。

>

  • 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);
        }
    

    }

    TimePickerFragment.java

    public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener
    

    {public Calendar c=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;
    }
    
    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();
        }
    }
    

    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>
    
  • 共有1个答案

    太叔小云
    2023-03-14

    问题是创建意图时,要这样做:

    mesg_intent = new Intent(this, Alarmservice.class);
    mest_intent.putExtras(bundle);
    pending_intent = PendingIntent.getBroadcast(this, 0, mesg_intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
     类似资料:
    • 问题内容: 有人可以解释和之间的确切区别吗? 在什么情况下我们必须使用每个Receiver类? 问题答案: 和之间只有一个区别。 当您收到内部广播方法时, 假设, BroadcastReceiver : 它 不保证 该 CPU将保持清醒 ,如果你启动一些长时间运行的进程。CPU可能会立即回到睡眠状态。 WakefulBroadcastReceiver : 这是 保证 该 CPU将保持清醒 ,直到你

    • 4.2.1.1 私有广播接收器 私人广播接收器是最安全的广播接收器,因为只能接收到从应用内发送的广播。 动态广播接收器不能注册为私有,所以私有广播接收器只包含静态广播接收器。 要点(接收广播): 将导出属性显示设为false 小心并安全地处理收到的意图,即使意图从相同的应用中发送 敏感信息可以作为返回结果发送,因为请求来自相同应用 AndroidManifest.xml <?xml version

    • 问题内容: 我想实现一个侦听器,如果有人从任何应用程序复制了任何东西,它将监听。 我听说有哪个将侦听复制操作,但这不是接收方(据我了解)。我有一个示例应用程序,该应用程序背后的逻辑是,从系统启动启动服务并运行一个服务,该服务将侦听“复制”操作,但是我认为这会耗尽电池。我对吗? 因此,我该如何实现可以监听复制动作的广播接收器。 问题答案: 这是监听器: 只需注册:

    • 我在这里读了这个答案,也在这里读了这个答案,我正在努力找出最适合我的情况。 我在中启动一个服务,在这里我发出一个HTTP请求,并得到一个作为响应。然后我广播这个,并在我的活动中接收它。 问题是,用户显然可以通过打开抽屉并选择一个选项导航到另一个活动,而我可能会错过广播。 很明显,我可以让我的所有活动扩展一个抽象类,这个抽象类扩展了这里提到的,但我不能100%肯定这是最好的解决方案。如果用户在我收到

    • 根据谷歌提供的AndroidO迁移指南,大部分隐含的广播意图不应该在清单中注册(除了这里发现的一些例外),但显式广播意图保持不变。 我们希望将任何需要的广播从舱单上移开。但我们如何识别接收者是否是隐性的呢?有一般规则吗? 下面是我们在清单中注册的广播示例。我们是否应该只查看“action”标记,并查看它是否被列入白名单以将其保留在清单中? 例如,“com.android.vending.INSTA

    • 4.2.1.3 内部广播接收器 内部广播接收器是广播接收器,它将永远不会收到从内部应用以外发送的任何广播。 它由几个内部应用组成,用于保护内部应用处理的信息或功能。 要点(接收广播): 定义内部签名权限来接收广播。 声明使用内部签名权限来接收结果。 将导出属性显式设置为true。 需要静态广播接收器定义的内部签名权限。 需要内部签名来注册动态广播接收器。 确认内部签名权限是由内部应用定义的。 尽管