我是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>
问题是创建意图时,要这样做:
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。 需要静态广播接收器定义的内部签名权限。 需要内部签名来注册动态广播接收器。 确认内部签名权限是由内部应用定义的。 尽管