标签: android-broadcastreceiver

如何获取在`AndroidManifest.xml`中定义的`BroadcastReceiver`实例

BroadcastReceiver我的应用程序中有一个,其定义AndroidManifest.xml如下:

<receiver android:name=".receiver.MyTaskReceiver">
    <intent-filter>
        <action android:name="xxx.xxx.xxx" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

这是MyTaskReceiver代码:

public class MyTaskReceiver extends BroadcastReceiver {

    private ReceiverListener listener ;

    @Override
    public void onReceive(Context context, Intent intent) {
        //do general things

        if(listener != null) {
            listener.received();    //do special things if the listener is setted up.
        }
    }

    public void setListener(ReceiverListener listener) {
        this.listener = listener;
    }

    public interface ReceiverListener {
        void received();
    }

} 
Run Code Online (Sandbox Code Playgroud)

当接收者有意图时,我会先做一些一般的事情,比如保存数据...

但是如果向用户显示指定的活动,我需要更改活动的视图,因此我使用它ReceiverListener来执行此操作.设置一个监听器MyTaskReceiveronCreate,并设置nullonDestroy …

android broadcastreceiver android-broadcastreceiver

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

BroadcastReceiver 不触发通知操作点击

我正在尝试使用为其定义的按钮(操作)创建一个简单的通知。我设法正确显示它并为我的操作创建了一个 PendingIntent。我还创建了一个 BroadcastReceiver,应该在单击我的操作时调用它。但它的 onReceive() 方法没有被调用。我不知道为什么。我还在 AndroidManifest.xml 中注册了 BroadcastReceiver

主活动.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button notify = (Button) findViewById(R.id.notify);

    notify.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent dismissIntent = new Intent("action1");
            dismissIntent.setAction("action1");
            PendingIntent action1intent = PendingIntent.getBroadcast(MainActivity.this, (int) System.currentTimeMillis(), dismissIntent, PendingIntent.FLAG_CANCEL_CURRENT);

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(MainActivity.this)
                            .setSmallIcon(R.drawable.ic_menu)
                            .setContentTitle("My notification")
                            .setContentText("Hello World!")
                            .addAction(R.drawable.ic_menu, "action 1", action1intent);

            Intent resultIntent = new Intent(MainActivity.this, MainActivity.class);
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this);
            stackBuilder.addParentStack(MainActivity.class);
            stackBuilder.addNextIntent(resultIntent);

            PendingIntent resultPendingIntent = …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-notifications android-broadcast android-broadcastreceiver

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

如何通过PendingIntent将自定义Serializable对象传递给BroadcastReceiver

我试图使用PendingIntent将自定义的Serialized对象从我的IntentService传递给BroadcastReceiver.

这是我的自定义对象:

Row.java

public class Row implements Serializable {
    private String name;
    private String address;

    public Row(BluetoothDevice device) {
        this.name = device.getName();
        this.address = device.getAddress();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的IntentService

MyIntentService.java

public class MyIntentService extends IntentService {

    public MyIntentService() {
        super("MyIntentService");
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    protected void onHandleIntent(Intent workIntent) {
        AlarmManager alarmMgr;
        PendingIntent alarmPendingIntent;
        Intent alarmIntent;
        // The object "RowsList" is passed from my MainActivity and is correctly received by my IntentService.
        // NO PROBLEMS HERE
        Row[] …
Run Code Online (Sandbox Code Playgroud)

java android android-pendingintent android-broadcastreceiver

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

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
查看次数

清单声明的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
查看次数

广播接收器中 SEND 操作的意图过滤器

我希望用户能够共享/发送到我的应用程序,但我不想启动活动(我只需要在网络上发送一些数据,并显示成功消息弹出窗口)。我正在想象为此使用广播接收器,但是下面显示的意图过滤器虽然在正常活动中工作,但不适用于接收器(即我的应用程序没有显示在我可以共享的内容列表中) )。

    <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

我应该在这里使用接收器,还是有其他方法可以捕获 SEND 意图而不启动完整的活动?

android android-intent android-broadcastreceiver

2
推荐指数
1
解决办法
676
查看次数

如何通过 ADB 检查是否正在使用外部麦克风

我正在尝试通过 ADB 检查是否使用了外部有线耳机麦克风。当我插入有线耳机时,会自动检测到此麦克风,但出于外部脚本编写的目的,检测此操作将非常有帮助。

我找不到麦克风的意图,但在此处查找了耳机意图: http://developer.android.com/reference/android/content/Intent.html

我尝试了这个广播意图来单独检测耳机:

adb shell am broadcast -a android.intent.action.HEADSET_PLUG
Run Code Online (Sandbox Code Playgroud)

无论有线耳机是否实际插入,都会得到此响应:

Broadcasting: Intent { act=android.intent.action.HEADSET_PLUG }
Broadcast completed: result=0
Run Code Online (Sandbox Code Playgroud)

所以我不知道从这里该去哪里。我什至无法检测耳机是否已插入,更不用说是否正在使用外部麦克风了。任何帮助将不胜感激。谢谢!

android adb android-intent android-broadcastreceiver

2
推荐指数
1
解决办法
6220
查看次数

Android - ConnectivityManager.EXTRA_NETWORK_INFO已弃用

我正在创建一个BroadcastReceiver来监听Wi-Fi连接的变化:

registerReceiver(new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {

            NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); // deprecated

            // Get connectivity details from networkInfo...

        }

    }

}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
Run Code Online (Sandbox Code Playgroud)

但是,ConnectivityManager.EXTRA_NETWORK_INFO已弃用,那么如何获取NetworkInfo对象呢?

android android-broadcast android-broadcastreceiver

2
推荐指数
1
解决办法
3470
查看次数

Mobilock 应用程序在 BOOT_COMPLETED 广播之前启动...这怎么可能?

有一个名为 Mobilock 的信息亭应用程序。这个应用程序的启动速度比我自己的以 BOOT_COMPLETED 广播启动的应用程序要快得多(几乎提前了 5 秒)。

我自己的应用程序具有最高优先级,即整数的最大值。所以这不是优先级的问题。

这些人找到了一种比 BOOT_COMPLETED 广播早 5 秒启动应用程序的方法。

有人知道他们在做什么吗?

android android-broadcastreceiver

2
推荐指数
1
解决办法
806
查看次数

活动过渡API无法正常工作

我希望使用新的Activity过渡API,在按照此处的教程进行操作后我无法获得所需的结果。

这是我用于设置要检测的活动过渡的代码:

public void setActivityTransitions() {
    transitionList = new ArrayList<>();
    ArrayList<Integer> activities = new ArrayList<>(Arrays.asList(
            DetectedActivity.STILL,
            DetectedActivity.WALKING,
            DetectedActivity.ON_FOOT,
            DetectedActivity.RUNNING,
            DetectedActivity.ON_BICYCLE,
            DetectedActivity.IN_VEHICLE));
    for (int activity :
            activities) {
        transitionList.add(new ActivityTransition.Builder()
                .setActivityType(activity)
                .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER).build());

        transitionList.add(new ActivityTransition.Builder()
                .setActivityType(activity)
                .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT).build());

    }

}
Run Code Online (Sandbox Code Playgroud)

然后请求活动转换更新:

 ActivityTransitionRequest activityTransitionRequest = new ActivityTransitionRequest(transitionList);
        Intent intent = new Intent(context, ActivityDetectorTransitionService.class);
        intent.setAction("com.test.activityrecognition.START_ACTIVITY_TRANSITION_DETECTION_ALARM");
        PendingIntent pendingIntent = PendingIntent.getService(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        Task<Void> task = ActivityRecognition.getClient(context).requestActivityTransitionUpdates(activityTransitionRequest, pendingIntent);
        task.addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void result) {
                System.out.println("onSuccess");
            }
        });
        task.addOnFailureListener(new OnFailureListener() …
Run Code Online (Sandbox Code Playgroud)

android android-pendingintent activity-recognition android-broadcastreceiver activitytransitionapi

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