Intent Filter Pending Intent,Broadcast Receiever和Notification Manager

时间:2015-09-18 04:58:51

标签: android android-intent notifications broadcastreceiver intentfilter

我正在努力理解这些概念是如何运作的。

有人可以向我解释这些概念吗?

这是我想要理解的代码

Intent intent = new Intent();
        intent.setAction("com.example.akshay.proximityalertexample2");
        PendingIntent intent1 = PendingIntent.getBroadcast(this, 0, intent, 0);
        locationManager.addProximityAlert(LAT, LONG, 200, -1, intent1);
        IntentFilter filter = new IntentFilter("com.example.akshay.proximityalertexample2");
        registerReceiver(new ProximityAlert(), filter);

广播类文件

package com.example.akshay.proximityalertexample2;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.util.Log;
import android.widget.Toast;

/**
 * Created by Akshay on 9/18/2015.
 */
public class ProximityAlert extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String key = LocationManager.KEY_PROXIMITY_ENTERING;
        Toast.makeText(context, key, Toast.LENGTH_SHORT).show();
        Boolean entering = intent.getBooleanExtra(key, false);

        if (entering) {
            Log.e(getClass().getSimpleName(), "entering");

        } else {
            Log.e(getClass().getSimpleName(), "exiting");
        }
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

        Notification notification = createNotification();

        PendingIntent pendingIntent = PendingIntent.getActivity(context , 0 , null , 0 );

        notification.setLatestEventInfo(context,"Proximity Alert!!","You Are Near the Point of intereste " ,pendingIntent);

    }

    private Notification createNotification() {
        Notification notification = new Notification();
        notification.when = System.currentTimeMillis();
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.flags |= Notification.FLAG_SHOW_LIGHTS;

        notification.ledOffMS = 1500;
        notification.ledOnMS = 1500;
        return notification;

    }
}

请解释一下这些概念的运作情况.. 任何帮助都意味着我很多

非常感谢

1 个答案:

答案 0 :(得分:0)

这是一个非常古老的主题,但我想到了我自己的学习以及其他任何人来到这个主题的好处,我会对它进行一次拍摄。

  1. 在第一个片段中,您正在创建一个不执行任何操作的intent,并使用pendingIntent包装它,以便稍后在某个时间点由app调用。意图过滤器用于让其他应用程序(在这种情况下主要是接收者)知道我们正在处理什么样的意图(这是一个糟糕的例子,个人会像PROX_ALERT_INTENT一样)。我们添加一个接近警报,并使用我们的Receiver类注册该意图。

  2. 在Receiver类中,我们首先定义一个布尔键,用于确定我们是否已进入近距离警报半径。然后我们从广播的意图中获取密钥(它自动传递),然后我们检查用户是否确实进入了接近警报区域。 如果他有,我们会创建一个附加了未决意图的通知(例如,在此情况下只会启动新活动),然后启动通知。

  3. 请注意,这种通知构建方法已弃用,现在必须使用构建器。