标签: android-broadcast

应用程序以不同方式打开/关闭时显示推送通知

在我的应用程序中,我有一些继承自一个BaseActivity的活动.
我的应用程序收到推送通知,GCMBaseIntentService
我需要实现下一个逻辑:
如果应用程序打开显示对话框,如果关闭显示通知,则收到推送.

我的代码:

    public class GCMIntentService extends GCMBaseIntentService {

----------------------- other code ----------------------------------------

    @Override
        protected void onMessage(Context context, Intent intent) {
            Log.d(TAG, "onMessage : " + String.valueOf(intent));

            // This is how to get values from the push message (data)
            String payload = intent.getExtras().getString("payload");
            String message = "";
            String messageID;

            if (payload.contains("{")) {
                try {
                    JSONObject jsonArray = new JSONObject(payload);

                    message = jsonArray.get("Msg").toString();
                    messageID = jsonArray.get("MessageID").toString();

                    GA_Handler.sendEvent("Popup_Push", String.format("Push message %s", messageID));

                } catch (Exception ex) {
                    // Do …
Run Code Online (Sandbox Code Playgroud)

android push-notification google-cloud-messaging android-broadcast

4
推荐指数
1
解决办法
6256
查看次数

如何在没有Activity/Service的情况下创建BroadcastReceiver?

我正在尝试创建没有活动/服务的BroadcastReceiver.虽然当我删除活动时代码中存在活动时注册和执行代码没有问题,但它失败了.

我使用清单(!)注册BroadcastReceiver但是当从项目中删除活动时它没有被调用.

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <receiver android:name="com.ge.test.InstallsListener" >
        <intent-filter>
            <data android:scheme="package" />
            <action android:name="android.intent.action.PACKAGE_ADDED" android:priority="100"/>                
        </intent-filter>
    </receiver>
</application>
Run Code Online (Sandbox Code Playgroud)

谢谢.

android android-activity android-broadcast

4
推荐指数
1
解决办法
5267
查看次数

Intent.ACTION_REBOOT和Intent.ACTION_SHUTDOWN之间的区别

我试图接收(BroadcastReceiver关闭)关闭,启动和重新启动的操作.

我搜索了很多,但我无法弄清楚Intent.ACTION_REBOOT和之间的区别是什么Intent.ACTION_SHUTDOWN,以及什么时候被Intent.ACTION_REBOOT调用(或者我应该说"广播").

可以请有人为我解释一下吗?

android reboot shutdown intentfilter android-broadcast

4
推荐指数
1
解决办法
8310
查看次数

Android在后台保留BroadcastReceiver

我创建了一个BroadcastReceiver,它只在最近的应用程序菜单中显示我的应用程序时运行.如果我从最近的应用程序中删除我的应用程序,BroadcastReceiver将停止工作.如何将BroadcastReceiver保留在后台?

我从我的主要活动(在OnCreate()中)注册BroadcastReceiver.

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, intentFilter);

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

    }   
};
Run Code Online (Sandbox Code Playgroud)

android background-process broadcastreceiver android-service android-broadcast

4
推荐指数
1
解决办法
1万
查看次数

Android广播到特定的第三方应用程序

我开发了一个android应用,并通过自定义权限发送广播。

public abstract void sendBroadcast (Intent intent, String receiverPermission)
Run Code Online (Sandbox Code Playgroud)

现在,任何具有广播接收器并在清单中声明了自定义权限的第三方应用程序都将能够收听广播。

有没有一种方法可以控制哪个应用程序可以从我的应用程序接收广播?

我担心的是,自定义权限被错误的人掌握,他们开始创建自己的应用程序以收听我的广播。

仅供参考,保护级别设置为危险。

谢谢,

java android android-broadcast

4
推荐指数
1
解决办法
1484
查看次数

Android Wifi Scan - 无法调用SCAN_RESULTS_AVAILABLE_ACTION的BroadcastReceiver

这是我的代码:

public class FloatWifiManager implements IWifiManager {

    private WifiManager wifiManager;

    private BroadcastReceiver wifiScanReceiver;

    public FloatWifiManager(Context context) {
        ...
        wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

        // Registering Wifi Receiver
        wifiScanReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context c, Intent intent) {
                if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
                    // not getting called, only after running app and manually going to the wifi settings in android
                }
            }
        };

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        context.registerReceiver(wifiScanReceiver, intentFilter);
        wifiManager.startScan();
    }
Run Code Online (Sandbox Code Playgroud)

我注册的BroadcastReceiver就像我在所有的例子中看到的那样,并且做到了startScan.

会发生什么,wifi列表正在改变(当然,我测试过),但 …

android broadcastreceiver wifimanager android-wifi android-broadcast

4
推荐指数
1
解决办法
8082
查看次数

如何接收USB连接状态广播?

我正在尝试检测我的应用程序中的USB连接,即USB是否连接到设备。

正在棉花糖6.0.1(sdk23)上进行测试

但是我无法接收广播动作ACTION_USB_DEVICE_ATTACHED或ACTION_USB_DEVICE_DETACHED。

我尝试同时使用动态方式和AndroidManifest.xml方式,但均无效。

这是我的代码:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gokulnc.blah_blah"
    android:installLocation="auto"
    android:versionCode="15"
    android:versionName="1.5.1">

    <uses-feature android:name="android.hardware.usb.host" />

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="23" />

    <android:uses-permission android:name="android.permission.USB_PERMISSION" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:vmSafeMode="false">

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/DrawerTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <receiver android:name="mUsbReceiver">
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
            </intent-filter>
            </receiver>
        </activity>        
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

public class MainActivity extends AppCompatActivity {
    BroadcastReceiver mUsbReceiver;

    public void onCreate(Bundle savedInstanceState) {
        .....
        setBroadcastReceivers();
    }

    void setBroadcastReceivers() { …
Run Code Online (Sandbox Code Playgroud)

android android-intent android-broadcast android-broadcastreceiver

4
推荐指数
2
解决办法
8257
查看次数

如何使用NFC动作

我试图以编程方式注册接收器,以便在检测到NFC标签后收到通知.如我的代码所示,我注册了所需的操作,并以编程方式创建了广播接收器.我还在清单文件中添加了所需的权限,但问题onReceive是永远不会被调用.

请让我知道我做错了什么以及如何解决它.

IntentFilter intentFilter1 = new IntentFilter();
intentFilter1.addAction("android.nfc.action.TAG_DISCOVERED");
registerReceiver(mBCR_TAG_DISCOVERED, intentFilter1);

private BroadcastReceiver mBCR_TAG_DISCOVERED = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        mTv.setText("mBCR_TAG_DISCOVERED");
    }
};
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="example.com.myapplication">

<uses-permission android:name="android.permission.NFC" />

<uses-feature
    android:name="android.hardware.nfc"
    android:required="true" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>
</application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

android nfc intentfilter broadcastreceiver android-broadcast

4
推荐指数
1
解决办法
1651
查看次数

奥利奥:广播接收器不工作

每当用户拨打新电话时,我都试图在我的应用程序上获得通知触发器.我在我的活动中注册接收器并在onDestroy()方法中销毁它.以下是用于注册的代码片段

registerReceiver(inComingCall = new IncomingCall(),new IntentFilter("android.intent.action.PHONE_STATE"));
Run Code Online (Sandbox Code Playgroud)

我面临的问题是我没有在广播接收器的覆盖onReceive()方法中获得任何触发器.请告诉我是否有任何新的实施方式或我应该采取的单独方式来接收特别是奥利奥的广播.

提前致谢.

android broadcastreceiver android-broadcast android-8.1-oreo

4
推荐指数
1
解决办法
8235
查看次数

使用广播PendingIntent和AlarmManager.setAlarmClock()丢失意图附加信息

我创建了PendingIntent这样的:

Intent intent = new Intent(context, AlarmReceiver.class);
intent.setAction("Foobar");
intent.putExtra(EXTRA_ALARM, alarm);
intent.putExtra(EXTRA_TRYTWO, tryTwo);
intent.putExtra(EXTRA_BEGAN_TIME, beganTime);

return PendingIntent.getBroadcast(
        context, (int) alarm.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT
);
Run Code Online (Sandbox Code Playgroud)

alarm变量是一个Parcelable.我这样安排PendingIntent:

PendingIntent alarmModifyPendingIntent = PendingIntent.getActivity(
        context, 0, editIntent, PendingIntent.FLAG_CANCEL_CURRENT
);

am.setAlarmClock(
    new AlarmManager.AlarmClockInfo(time, alarmModifyPendingIntent), pendingIntent
);
Run Code Online (Sandbox Code Playgroud)

pendingIntent如上所示创建变量的位置.

AlarmReceiver对象接收IntentonReceive在正确的时间.但是,这Intent不包含我设置的额外内容.例如intent.getParcelableExtra(EXTRA_ALARM)返回null.

Android 7.0(API级别24)至少使用LG G5会出现此问题.

使用FLAG_CANCEL_CURRENTFLAG_ONE_SHOT不工作.

android android-intent android-alarms android-pendingintent android-broadcast

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