【问题标题】:Transferring Data From Activity To BroadCast Receiver将数据从活动传输到广播接收器
【发布时间】:2017-11-20 09:06:31
【问题描述】:

我正在制作一个警报应用程序,当用户输入标题和描述时,它会在选定时间显示通知。 我想在intents 中存储两个名为txttitletxtdesc 的字符串值,并在通知到达时将它们发送到broadcast-receiver,该通知的标题和描述应该分别是标题和描述字符串值。我已成功发出通知,但没有我需要的标题和描述,类似于 app.support.v7.widget
这是我的代码。
AddNote .java

public class AddNote extends AppCompatActivity {

    int mHour, mMin, hour , min, mYear, mMonth, mDay;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_note);
        final CheckBox chckRem = (CheckBox) findViewById(R.id.cHcRem);
        final Button btnOk = (Button) findViewById(R.id.bTok);

        chckRem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (chckRem.isChecked()){
                    /** It is checked*/
                    // Get Current Date
                  final Calendar c = Calendar.getInstance();
                    mYear = c.get(Calendar.YEAR);
                    mMonth = c.get(Calendar.MONTH);
                    mDay = c.get(Calendar.DAY_OF_MONTH);


                    DatePickerDialog datePickerDialog = new DatePickerDialog(AddNote.this,
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                               final int day = dayOfMonth;
                               final int yer = year;
                                final int month = monthOfYear;

                                    /** LAUNCH THE TIMEPICKER*/
                                    Calendar c = Calendar.getInstance();
                                    mHour = c.get(Calendar.HOUR_OF_DAY);
                                    mMin =c.get(Calendar.MINUTE);

                                    /** LAUNCH THE TIMEPICKER*/
                                    // Launch Time Picker Dialog
                                    TimePickerDialog timePickerDialog = new TimePickerDialog(AddNote.this,
                                            new TimePickerDialog.OnTimeSetListener() {

                                                @Override
                                                public void onTimeSet(TimePicker view, int hourOfDay,
                                                                      int minute) {
                                                    /**tHIS*/
                                                    hour = hourOfDay;
                                                    min = minute;
                                                    int sec = 0;
                                                    Calendar cl = Calendar.getInstance();
                                                    cl.setTimeInMillis(System.currentTimeMillis());
                                                    cl.clear();
                                                    cl.set(yer, month, day, hour, min);
                                                    EditText txtitle = (EditText) findViewById(R.id.tTit);
                                                    EditText txtdesc = (EditText) findViewById(R.id.tDet);
                                                    Intent notMessage = new Intent(getApplicationContext(), NotificatioRec.class);
                                                    notMessage.putExtra("TITLE", txtitle.toString().trim());
                                                    notMessage.putExtra("DEC", txtdesc.toString().trim());
                                                    PendingIntent pi = PendingIntent.getBroadcast(AddNote.this, 0, notMessage, PendingIntent.FLAG_UPDATE_CURRENT);
                                                    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                                                    am.set(AlarmManager.RTC_WAKEUP, cl.getTimeInMillis(), pi);
                                                    Toast.makeText(AddNote.this, "Reminder Added", Toast.LENGTH_SHORT).show();
                                                }
                                            }, mHour, mMin, false);
                                    timePickerDialog.show();

                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();

                }

            }
        });

        btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    TextoDatabaseHelper textoDatabaseHelper = new TextoDatabaseHelper(AddNote.this);
                    SQLiteDatabase db = textoDatabaseHelper.getReadableDatabase();
                    Calendar calend = Calendar.getInstance();
                    int YEAR = calend.get(Calendar.YEAR);
                    int MONTH = calend.get(Calendar.MONTH);
                    int DAY = calend.get(Calendar.DAY_OF_MONTH);
                    String date = DAY + "-" + MONTH + "-" + YEAR;
                    EditText txt_title = (EditText) findViewById(R.id.tTit);
                    String Title = txt_title.getText().toString().trim();
                    EditText txt_Desc = (EditText) findViewById(R.id.tDet);
                    String Desc = txt_Desc.getText().toString().trim();
                    insertNote(db, Title, Desc, date);
                    Toast.makeText(AddNote.this, "Note Added" , Toast.LENGTH_SHORT).show();
                    AddNote.this.finish();
                }catch (SQLException e){
                    Toast.makeText(AddNote.this, "Can't add a new note! Try again.", Toast.LENGTH_SHORT).show();
                }

            }
        });
    }

    public static void insertNote(SQLiteDatabase db, String title, String desc, String date){
        ContentValues Notes = new ContentValues();
        Notes.put("TITLE", title);
        Notes.put("DESCRIPTION", desc);
        Notes.put("DATE", date);
        db.insert("NOTES", null, Notes);
    }
}

NotificatioRec.java

public class NotificatioRec extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String title = intent.getStringExtra("TITLE");
        String desc  = intent.getStringExtra("DESC");
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0 , new Intent(context, MainActivity.class), 0);
        NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.logo)
                .setContentTitle(title).setContentText(desc);
        mBuilder.setContentIntent(contentIntent);
        mBuilder.setDefaults(Notification.DEFAULT_SOUND);
        mBuilder.setCategory(Notification.CATEGORY_ALARM);
        mBuilder.setAutoCancel(true);

        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, mBuilder.build());
    }
}

但是,唯一的问题是它没有显示标题和描述。

【问题讨论】:

  • 尝试将字符串 notMessage.putExtra("TITLE", txtitle.toString().trim()); 更改为 notMessage.putExtra("TITLE", String.valueOf(txtitle.getText()).trim()); 和“DEC”。

标签: android android-intent broadcastreceiver android-notifications


【解决方案1】:

像下面这样使用 广播发送到活动

 Intent smsIntent = new Intent("otp");
            smsIntent.putExtra("message",sms_str);

            LocalBroadcastManager.getInstance(context).sendBroadcast(smsIntent);

让 Activity 接收上述意图。

 private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equalsIgnoreCase("otp")) {



            }
        }
    };

【讨论】:

    【解决方案2】:

    在您希望从中发送意图的 Adnote 活动中添加以下代码

    Intent intent = new Intent("my.action.data");
    intent.putExtra("otp", otp);
    sendBroadcast(intent);
    

    在接收方法上获取数据

    public void onReceive(Context context, Intent intent) {
       String action = intent.getAction();
       Log.i("onReceive Method", "" + action);
    
       if(action.equals("my.action.data")){
              String otp= intent.getExtras().getString("otp");
    
       }
     }
    

    在您的接收器中添加以下代码(清单文件)

    <receiver android:name=".SmsReceiver" android:enabled="true">
         <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
         <action android:name="my.action.data" />
     </intent-filter>
    </receiver> 
    

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      相关资源
      最近更新 更多