我想用通知消息创建广播AlarmManager(重复).我从Pickers传递我的日历对象.如果我不重启我的设备,它可以正常工作.但是,当我重启我的设备时,你知道我的calander对象将为null.如何在重新启动后管理重复警报以及如何保存日历计划?谢谢你的想法.
public class MyReceiver extends BroadcastReceiver {
private static final int PERIOD = 10000;
final public static String ALARM_ID = "AlarmId";
final public static String NOTIFICATION_ID = "NotificationId";
@Override
public void onReceive(Context ctxt, Intent i) {
}
static void scheduleAlarms(Context ctxt,Calendar c) {
AlarmManager alarManager = (AlarmManager) ctxt
.getSystemService(Context.ALARM_SERVICE);
//notification servise
Intent i = new Intent(ctxt, ScheduledService.class);
i.putExtra(ALARM_ID, 1);
i.putExtra(NOTIFICATION_ID, 1);
PendingIntent pi = PendingIntent.getService(ctxt, 0, i,
PendingIntent.FLAG_UPDATE_CURRENT);
alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),PERIOD, pi);
}
Run Code Online (Sandbox Code Playgroud) 我打电话一个BroadcastReceiver通过AlarmManager和它的作品对我很好.
但
这次我需要什么
I want to create multiple AlarmManager which call the same BroadcastReceiver Class.
这个过程的方法是什么?
在以前版本的android中,我们可以使用以下代码阻止SMS:
<receiver android:name=".broadcastreceivers.OnSMSReceived"
android:exported="true" android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在广播接收器中,abortBroadcast()函数阻止SMS进入收件箱.但是这种方法在kitkat中不起作用,因为来自Kitkat的SMS只会被默认的SMS应用程序接收.有没有解决方法在kitkat中创建SMS拦截器应用程序?
sendBroadcastAsUser上唯一的文档说:
sendBroadcastAsUser(意图意图,UserHandle用户,字符串receiverPermission)
sendBroadcast(Intent,String)的版本,允许您指定广播将发送到的用户。
但我找不到任何有关如何指定用户或如何设置侦听器以收听此类广播的示例。
在AOSP源代码中,我找到了以下示例:
Intent intent = new Intent(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
intent.putExtra(PhoneConstants.STATE_KEY,
DefaultPhoneNotifier.convertCallState(state).toString());
if (!TextUtils.isEmpty(incomingNumber)) {
intent.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, incomingNumber);
}
intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
android.Manifest.permission.READ_PHONE_STATE);
Run Code Online (Sandbox Code Playgroud)
UserHandle.ALL作为指定用户是什么意思,如果从字面上讲是“ all”,那么将sendBroadcastAsUser()与ALL一起使用而不是仅使用普通的sendBroadcast()有什么意义呢?
我的应用程序能够收听此特定系统的广播吗?
我正在使用解析Json通过自定义接收器将通知推送到我的应用程序,因为我想导航到应用程序中的不同位置,这取决于Json我收到的值,我有2个案例要导航:
a)7
b)1,2,3,4,5,6
case a打开一个activity,这是正常的.case 在`MainActivity中b打开a fragment."这就是问题所在."
我尝试打开MainActivity正常意图,然后用片段替换它的容器.
当我尝试打开案例时,b我ClassCastException从这个片段进入第三行,因为它无法将BaseClass上下文转换为v4片段.当我给它只context属于接收器上下文时,我得到了相同的异常.
intent = new Intent(context, MainScreen.class);
Fragment fragment = new NotificationFragment();
FragmentTransaction transaction = ((FragmentActivity) context.getApplicationContext()).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container, fragment).commit();
Run Code Online (Sandbox Code Playgroud)
这是例外:
FATAL EXCEPTION: main
Process: com.myapp.SomeApp, PID: 9639
java.lang.RuntimeException: Unable to start receiver com.myapp.SomeApp.Receivers.NotifyReceiver: java.lang.ClassCastException: com.myapp.SomeApp.utils.BaseClass cannot be cast to android.support.v4.app.FragmentActivity
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2616)
at android.app.ActivityThread.access$1700(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at …Run Code Online (Sandbox Code Playgroud) 所以我一直试图Intent.ACTION_DREAMING_STARTED在我的内部注册AndroidManifest但没有成功.
<application>
...
<receiver android:name=".broadcastReceivers.DreamingReceiver">
<intent-filter>
<action android:name="android.intent.action.DREAMING_STOPPED"/>
<action android:name="android.intent.action.DREAMING_STARTED"/>
</intent-filter>
</receiver>
...
</application>
Run Code Online (Sandbox Code Playgroud)
这是接收器的定义.
public class DreamingReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("DreamingReceiver", "Intent: " + intent.getAction());
}
}
Run Code Online (Sandbox Code Playgroud)
当白日梦实际开始时,就没有来自该BroadcastReceiver的日志.
但是,当我用我Activity的onCreate方法定义接收器时:
this.receiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d("Activity Dreaming", "Intent: " + intent.getAction());
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_DREAMING_STARTED);
filter.addAction(Intent.ACTION_DREAMING_STOPPED);
this.registerReceiver(this.receiver, filter);
Run Code Online (Sandbox Code Playgroud)
每当我的设备进入/离开白日梦时,我都会收到日志.有没有理由为什么BroadcastReceiver我在AndroidManifest中定义的内容没有捕获到Intent?
显然,根据参考文献 …
android broadcastreceiver android-manifest android-intent android-broadcast
我有一个关于将数据传递BroadcastReceiver给a的严重问题Activity.让我们仔细看看我的问题.我有一个PhoneStateReceiver extends BroadcastReceiver曾经收到传入电话的课程.
public class PhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
System.out.println("Receiver start");
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
}
}
catch (Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
来电将被发送到Activity,被叫ReceiverActivity.在ReceiverActivity接收来电,并通过套接字连接发送到服务器.套接字连接在onCreate函数中初始化.我用谷歌搜索并找到服务器方式将数据传递BroadcastReceiver给Activity.常见的方法是通过putExtra函数和调用发送数据startActivity.但是,该方法将onCreate再次调用然后连接套接字,再次绘制UI.因此,在我的情况下它没有帮助.
在我的目标中,如果手机接到来电,它会将来电发送给ReceiverActivity.该ReceiverActivity接收消息并调用发送功能.这是最好的方法吗?谢谢
将数据从a传递BroadcastReceiver到ReceiverActivity我使用的常用方法如下所示
在PhoneStateReceiver类中:
Intent intent_phonenum = …Run Code Online (Sandbox Code Playgroud) 我已经阅读了其他存在的线程,但是它们都无法解决我的问题。
我正在构建一个应用程序,该应用程序在没有互联网的情况下缓存消息并将其存储到数据库中。这个想法是,当有网络连接时,它从数据库中提取数据并在后台发送消息-为此,我制作了一个广播接收器,并使其接收“ android.net.conn.CONNECTIVITY_CHANGE”广播-然后制作了该应用将消息发布到服务器
网络更改时出现的错误:
java.lang.RuntimeException: Unable to instantiate receiver com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver: java.lang.InstantiationException: java.lang.Class<com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver> has no zero argument constructor
Run Code Online (Sandbox Code Playgroud)
广播接收器类(NetworkChangeReceiver.java):
public class NetworkChangeReceiver extends BroadcastReceiver{
private static final String TAGNCR = "JSON";
private final Handler handler; // Handler used to execute code on the UI thread
public NetworkChangeReceiver(Handler handler) {
this.handler = handler;
}
DataBaseHelper myDB;
final String MESSAGES_ENDPOINT = "";
@Override
public void onReceive(Context context, Intent intent) {
int[] type = {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI};
if (isNetworkAvailable(context) == true){
//check for messages to …Run Code Online (Sandbox Code Playgroud) java android broadcastreceiver android-broadcast android-broadcastreceiver
我进行了搜索,但没有得到任何答案。当我们的手机连接到Android Auto时,是否可以检测到任何广播?
我有这段代码,但是需要通过某些事件来运行。
public static boolean isCarUiMode(Context c) {
UiModeManager uiModeManager = (UiModeManager) c.getSystemService(Context.UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) {
LogHelper.d(TAG, "Running in Car mode");
return true;
} else {
LogHelper.d(TAG, "Running on a non-Car mode");
return false;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试让两个应用程序通过广播进行通信。第一个应用程序使用以下代码发送广播:
Intent outIntent = new Intent("org.example.WHATEVER");
PackageManager pm = this.getPackageManager();
List<ResolveInfo> receivers = pm.queryBroadcastReceivers(outIntent, 0);
if (receivers != null)
for (ResolveInfo receiver : receivers) {
Log.d("Sender", String.format("Polling %s", receiver.activityInfo.packageName));
outIntent = new Intent("org.example.WHATEVER");
outIntent.setPackage(receiver.activityInfo.packageName);
sendBroadcast(outIntent);
}
Run Code Online (Sandbox Code Playgroud)
接收端BroadcastReceiver在清单中注册一个:
<receiver android:name="org.example.receiverapp.WhateverReceiver" >
<intent-filter>
<action android:name="org.example.WHATEVER" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
该onReceive()方法在调用时写入一个日志条目。
当接收应用程序运行时(即,我的主要活动在屏幕上显示,然后离开它进行导航),它将处理广播。但是,如果接收器应用程序没有运行(我通过长按“后退”并已在“开发人员设置”中激活“长按后退以杀死应用程序”来确保),则广播不会将其唤醒。
我特意为此设置了一个软件包名称,以避免清单声明的接收方不再从Android 8开始接收隐式广播的问题。此外,我正在运行Android 7,两个应用程序均以API 23为目标,因此无论如何,Android 8中的任何限制在此设置中均无关紧要。
我遇到了一条评论,该评论的作者认为某些Android风格可能无法唤醒广播应用程序,这似乎是我在这里遇到的问题(运行LineageOS 14.1),尽管该评论不是很具体,我还没有发现了支持此主张的其他任何内容。
这是这里发生的事吗?如果是这样,如何确保广播唤醒了接收器应用程序(至少在定向的情况下)?如果没有,这是怎么了?