如何在android中获取broadcastreceiver的id

如何在android中获取broadcastreceiver的id,android,broadcastreceiver,alarmmanager,android-pendingintent,Android,Broadcastreceiver,Alarmmanager,Android Pendingintent,我想获取broadcastriver的id 有没有办法找到广播接收器的id??我正在制作一个报警应用程序,在保存报警时,我使用挂起意图发送一个广播。现在,如果用户编辑报警,我想中止指定的广播,并发送新时间的新广播 我该怎么做 我使用这个代码进行广播 Intent intent = new Intent(this, StartProfileBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.ge

我想获取broadcastriver的id

有没有办法找到
广播接收器的
id
??我正在制作一个报警应用程序,在保存报警时,我使用
挂起意图
发送一个
广播
。现在,如果用户编辑报警,我想中止指定的
广播
,并发送新时间的新
广播

我该怎么做

我使用这个代码进行广播

Intent intent = new Intent(this, StartProfileBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                this.getApplicationContext(), 234324243, intent, 0);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, StartTimemill, pendingIntent);
在清单中,我用这个代码注册了我的BroadcastReceiver

 <receiver android:name="StartProfileBroadcastReceiver" >
 </receiver>

您可以:

  • 保留对向
    AlarmManager
    注册的
    PendingEvent
    对象的引用,并在注册新报警时调用
    PendingEvent.cancel
    以取消该对象
  • 在创建
    挂起内容时,请使用标志
    标志\u CANCEL\u CURRENT

  • 使用这两种方法,在创建新报警时,旧报警将被删除。

    您可以在my上找到该项目。通过该项目,您可以设置大量报警,并可以捕获已取消的报警

    需要保持报警类以获取特定数据

    Alarm.java

    public class Alarm {
        public int getState() {
            return state;
        }
    
        public void setState(int state) {
            this.state = state;
        }
    
        public int getUniqueID() {
            return uniqueID;
        }
    
        public void setUniqueID(int uniqueID) {
            this.uniqueID = uniqueID;
        }
    
        private int state;
        private int uniqueID;
    
    }
    
    import java.util.ArrayList;
    import android.app.Activity;
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        EditText text;
        int uniqueInteger = 1;
        AlarmHolder objAlarmHolder = AlarmHolder.getInstance();
        ArrayList<Alarm> tempAlarmHolder = new ArrayList<Alarm>();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            text = (EditText) findViewById(R.id.editText1);
    
            Button btn = (Button) findViewById(R.id.button1);
    
            btn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                                // we should pass unique integer to method 
                    startAlert(uniqueInteger);
                    uniqueInteger++;
                }
            });
        }
    
        public void startAlert(int rnd) {
            int i = Integer.parseInt(text.getText().toString());
            Bundle bundle = new Bundle();
            bundle.putInt("key", uniqueInteger);
    
            objAlarmHolder.registerAlarm(uniqueInteger);
    
            int alarmCount = 0;
            tempAlarmHolder.clear();
    
    
                // in this loop, all old alarms' state will set as 0
            for (Alarm alarm : objAlarmHolder.getAlarms()) {
    
                if(alarmCount < objAlarmHolder.getAlarms().size()-1)
                {
                    Alarm objAlarm = new Alarm();
                    objAlarm.setState(0);
                    objAlarm.setUniqueID(alarmCount);               
                    tempAlarmHolder.add(objAlarm);              
                }
                else
                {
                    tempAlarmHolder.add(alarm);             
                }           
                alarmCount++;
            }
    
            objAlarmHolder.replaceList(tempAlarmHolder);
    
    
    
    
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
                    + (i * 1000), getPendingIntent(bundle, uniqueInteger));
            Toast.makeText(this, "Alarm set in " + i + " seconds",
                    Toast.LENGTH_LONG).show();
        }
    
        private PendingIntent getPendingIntent(Bundle bundle, int rc) {
            Intent intent = new Intent(MainActivity.this, MyBroadcastReceiver.class);
    
                // send alarm id to broatcast
            intent.putExtras(bundle);
            return PendingIntent.getBroadcast(this, rc, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
        }
    }
    
    AlarmHolder是singleton,将报警保存在arraylist中

    AlarmHolder.java

    import java.util.ArrayList;
    
    public class AlarmHolder{
          private static AlarmHolder uniqueAlarmHolder;   
          private ArrayList<Alarm> lAlarms;
    
          private AlarmHolder() {         
              lAlarms = new ArrayList<Alarm>();
          }
    
          public  synchronized static AlarmHolder getInstance()     
          {
              if (uniqueAlarmHolder == null) {
                  uniqueAlarmHolder = new AlarmHolder();
                }
                return uniqueAlarmHolder;
          }   
    
          public void registerAlarm(int id) {
              Alarm a = new Alarm();
              a.setState(1);
              a.setUniqueID(id);
    
              lAlarms.add(a);
            }
    
          public void removeAlarm(int id,Alarm a) {
              Alarm newAlarm = new Alarm();
              a.setState(0);
              a.setUniqueID(id);
    
              lAlarms.remove(id);
              lAlarms.add(newAlarm);          
            }
    
          public void replaceList(ArrayList<Alarm> newList) {
              lAlarms.clear();
               lAlarms.addAll(newList);       
            }
    
          public ArrayList<Alarm> getAlarms() {
                return lAlarms;
            }
    
          public Alarm lastAlarmId() {
                return lAlarms.get(lAlarms.size()-1);
            }
      }  
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Vibrator;
    import android.util.Log;
    import android.widget.Toast;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
        AlarmHolder objAlarmHolder = AlarmHolder.getInstance();
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
                // with this key we can catch the alarm which we want
            int key = intent.getIntExtra("key",0);
    
    
            for (Alarm alarm : objAlarmHolder.getAlarms()) {
                // if alarmstate is 1 and the key belogs that alarm device will vibrate
                if (alarm.getState() == 1 & alarm.getUniqueID() == key ) {
                    Log.v("alarm", String.valueOf(String.valueOf(alarm.getUniqueID())));
                    Toast.makeText(context, "your alarm id : " + String.valueOf(alarm.getUniqueID()),Toast.LENGTH_LONG).show();
                    Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
                    vibrator.vibrate(2000);
                } else {
                    Log.v("alarm", "canceled alarm number : " + String.valueOf(alarm.getUniqueID()));
                }
    
            }
    
        }
    
    }
    
    MainActivity.java

    public class Alarm {
        public int getState() {
            return state;
        }
    
        public void setState(int state) {
            this.state = state;
        }
    
        public int getUniqueID() {
            return uniqueID;
        }
    
        public void setUniqueID(int uniqueID) {
            this.uniqueID = uniqueID;
        }
    
        private int state;
        private int uniqueID;
    
    }
    
    import java.util.ArrayList;
    import android.app.Activity;
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        EditText text;
        int uniqueInteger = 1;
        AlarmHolder objAlarmHolder = AlarmHolder.getInstance();
        ArrayList<Alarm> tempAlarmHolder = new ArrayList<Alarm>();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            text = (EditText) findViewById(R.id.editText1);
    
            Button btn = (Button) findViewById(R.id.button1);
    
            btn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                                // we should pass unique integer to method 
                    startAlert(uniqueInteger);
                    uniqueInteger++;
                }
            });
        }
    
        public void startAlert(int rnd) {
            int i = Integer.parseInt(text.getText().toString());
            Bundle bundle = new Bundle();
            bundle.putInt("key", uniqueInteger);
    
            objAlarmHolder.registerAlarm(uniqueInteger);
    
            int alarmCount = 0;
            tempAlarmHolder.clear();
    
    
                // in this loop, all old alarms' state will set as 0
            for (Alarm alarm : objAlarmHolder.getAlarms()) {
    
                if(alarmCount < objAlarmHolder.getAlarms().size()-1)
                {
                    Alarm objAlarm = new Alarm();
                    objAlarm.setState(0);
                    objAlarm.setUniqueID(alarmCount);               
                    tempAlarmHolder.add(objAlarm);              
                }
                else
                {
                    tempAlarmHolder.add(alarm);             
                }           
                alarmCount++;
            }
    
            objAlarmHolder.replaceList(tempAlarmHolder);
    
    
    
    
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
                    + (i * 1000), getPendingIntent(bundle, uniqueInteger));
            Toast.makeText(this, "Alarm set in " + i + " seconds",
                    Toast.LENGTH_LONG).show();
        }
    
        private PendingIntent getPendingIntent(Bundle bundle, int rc) {
            Intent intent = new Intent(MainActivity.this, MyBroadcastReceiver.class);
    
                // send alarm id to broatcast
            intent.putExtras(bundle);
            return PendingIntent.getBroadcast(this, rc, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
        }
    }
    
    import java.util.ArrayList;
    导入android.app.Activity;
    导入android.app.AlarmManager;
    导入android.app.pendingent;
    导入android.content.Intent;
    导入android.os.Bundle;
    导入android.view.view;
    导入android.view.view.OnClickListener;
    导入android.widget.Button;
    导入android.widget.EditText;
    导入android.widget.Toast;
    公共类MainActivity扩展了活动{
    编辑文本;
    int uniqueInteger=1;
    AlarmHolder-objAlarmHolder=AlarmHolder.getInstance();
    ArrayList tempAlarmHolder=新的ArrayList();
    @凌驾
    创建时的公共void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    text=(EditText)findViewById(R.id.editText1);
    按钮btn=(按钮)findViewById(R.id.button1);
    btn.setOnClickListener(新的OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    //我们应该将唯一的整数传递给方法
    startAlert(唯一整数);
    唯一整数++;
    }
    });
    }
    公共无效startAlert(国际注册){
    int i=Integer.parseInt(text.getText().toString());
    Bundle=新Bundle();
    bundle.putInt(“键”,uniqueInteger);
    objAlarmHolder.RegisterArm(唯一整数);
    int alarmCount=0;
    tempallarmholder.clear();
    //在此循环中,所有旧报警的状态都将设置为0
    用于(报警:objAlarmHolder.getAlarms()){
    如果(alarmCount
    Manifest.xml

     <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="15" />
       <uses-permission android:name="android.permission.VIBRATE" ></uses-permission>
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <receiver android:name="MyBroadcastReceiver" >
            </receiver>
        </application>
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="65dp"
            android:ems="10" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/editText1"
            android:layout_centerHorizontal="true"
            android:text="Button" />
    
    </RelativeLayout>
    
    
    
    活动\u main.xml

     <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="15" />
       <uses-permission android:name="android.permission.VIBRATE" ></uses-permission>
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <receiver android:name="MyBroadcastReceiver" >
            </receiver>
        </application>
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="65dp"
            android:ems="10" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/editText1"
            android:layout_centerHorizontal="true"
            android:text="Button" />
    
    </RelativeLayout>
    
    
    
    您能告诉我更多详细信息吗PLZZZ您需要哪些详细信息?因为您正在制作一个报警应用程序,它可能不会一直处于活动状态,所以您不应该尝试保留参考。只需使用方法2:
    pendingent pendingent=pendingent.getBroadcast(this.getApplicationContext(),2343243,intent,pendingent.FLAG_CANCEL_CURRENT)
    在创建新的报警集时,它会取消以前注册的
    PendingEvent
    (相同类型,使用匹配的意图)。但是当有多个报警集时会发生什么情况,并且用户编辑其中一个?回答不错,但考虑到大多数使用报警管理器的应用程序都不会运行,所以在数据库中保存唯一的_id会更好。