标签: android-broadcast

重启后重复警报管理器

我想用通知消息创建广播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)

android android-service android-broadcast

3
推荐指数
1
解决办法
6946
查看次数

为广播接收器创建多个AlarmManager?

我打电话一个BroadcastReceiver通过AlarmManager和它的作品对我很好.

这次我需要什么

I want to create multiple AlarmManager which call the same BroadcastReceiver Class.

这个过程的方法是什么?

android broadcastreceiver alarmmanager android-broadcast

3
推荐指数
1
解决办法
4742
查看次数

如何防止短信进入Android Kitkat的收件箱

在以前版本的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拦截器应用程序?

android android-broadcast

3
推荐指数
1
解决办法
5639
查看次数

sendBroadcastAsUser还有其他文档/教程/示例吗?

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()有什么意义呢?

我的应用程序能够收听此特定系统的广播吗?

android android-intent android-broadcast

3
推荐指数
1
解决办法
1855
查看次数

在后台应用程序时从通知中打开片段

我正在使用解析Json通过自定义接收器将通知推送到我的应用程序,因为我想导航到应用程序中的不同位置,这取决于Json我收到的值,我有2个案例要导航:

a)7

b)1,2,3,4,5,6

case a打开一个activity,这是正常的.case 在`MainActivity中b打开a fragment."这就是问题所在."

我尝试打开MainActivity正常意图,然后用片段替换它的容器.

当我尝试打开案例时,bClassCastException从这个片段进入第三行,因为它无法将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)

android android-fragments parse-platform android-broadcast

3
推荐指数
1
解决办法
6736
查看次数

在AndroidManifest中注册Intent.ACTION_DREAMING_STARTED

所以我一直试图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的日志.


但是,当我用我ActivityonCreate方法定义接收器时:

        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

3
推荐指数
1
解决办法
1405
查看次数

如何在没有onCreate()的情况下将数据从BroadcastReceiver传递给Activity

我有一个关于将数据传递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函数中初始化.我用谷歌搜索并找到服务器方式将数据传递BroadcastReceiverActivity.常见的方法是通过putExtra函数和调用发送数据startActivity.但是,该方法将onCreate再次调用然后连接套接字,再次绘制UI.因此,在我的情况下它没有帮助.

在我的目标中,如果手机接到来电,它会将来电发送给ReceiverActivity.该ReceiverActivity接收消息并调用发送功能.这是最好的方法吗?谢谢

将数据从a传递BroadcastReceiverReceiverActivity我使用的常用方法如下所示

PhoneStateReceiver类中:

Intent intent_phonenum = …
Run Code Online (Sandbox Code Playgroud)

sockets android broadcastreceiver android-broadcast

3
推荐指数
2
解决办法
4333
查看次数

java.lang.InstantiationException:类没有零参数构造函数错误

我已经阅读了其他存在的线程,但是它们都无法解决我的问题。

我正在构建一个应用程序,该应用程序在没有互联网的情况下缓存消息并将其存储到数据库中。这个想法是,当有网络连接时,它从数据库中提取数据并在后台发送消息-为此,我制作了一个广播接收器,并使其接收“ 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

3
推荐指数
1
解决办法
9736
查看次数

如何检测应用程序(或移动设备)是否已连接到Android Auto

我进行了搜索,但没有得到任何答案。当我们的手机连接到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)

android android-broadcast android-auto

3
推荐指数
1
解决办法
720
查看次数

清单声明的BroadcastReceiver在应用未运行时未获取明确的广播

我正在尝试让两个应用程序通过广播进行通信。第一个应用程序使用以下代码发送广播:

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),尽管该评论不是很具体,我还没有发现了支持此主张的其他任何内容。

这是这里发生的事吗?如果是这样,如何确保广播唤醒了接收器应用程序(至少在定向的情况下)?如果没有,这是怎么了?

android android-broadcast android-broadcastreceiver

3
推荐指数
1
解决办法
640
查看次数