简体   繁体   English

日期选择器时间选择器无法在 Android Studio 中工作

[英]Date Picker Time Picker Cant work in Android Studio

In there ı want send notification on spesific date and time with edittext varibles .在那里我想用 edittext 变量发送关于特定日期和时间的通知 I use DatePicker,TimePicker , AlertReciever.class , edittexts on my project .我在我的项目中使用 DatePicker、TimePicker、AlertReciever.class 和 edittexts。 It cant push notification .它不能推送通知。 I try but it cant work .我尝试但它不能工作。 How can ı solve my problem How can It will work .我如何解决我的问题它如何工作。 Can you be fast It's important for me .你能不能快点对我很重要。 Why it cant work.为什么它不能工作。

activty.class活动类

public class hatirlatici extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener,DatePickerDialog.OnDateSetListener {
    Calendar now = Calendar.getInstance();
    Button hatirlaticitarihsaat,backhome;
    EditText editisim,editaciklama;
    ImageView tick;
    TextView textbasariylakuruldu,texthatirlaticibas,hatirlaticiaciktext,zaman;
    private int notificationId = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hatirlatici);
        zaman=findViewById(R.id.zaman);
        editisim=findViewById(R.id.hatbaslik);
        tick=findViewById(R.id.tick);
        textbasariylakuruldu=findViewById(R.id.textbasariylakuruldu);
        texthatirlaticibas=findViewById(R.id.texthatirlaticibas);
        hatirlaticiaciktext=findViewById(R.id.hatirlaticiaciktext);
        editaciklama=findViewById(R.id.hataciklama);
        hatirlaticitarihsaat= findViewById(R.id.taarihsaatbutton);
        hatirlaticitarihsaat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogFragment datePicker = new DatePickerFragment();
                datePicker.show(getSupportFragmentManager(), "date picker");
            }
        });


    }
    public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
        now.set(Calendar.HOUR_OF_DAY, hourOfDay);
        now.set(Calendar.MINUTE, minute);
        now.set(Calendar.SECOND, 0);

        Intent intent = new Intent(hatirlatici.this, AlertReciever.class);
        intent.putExtra("notificationId", notificationId);
        intent.putExtra("messagex", editaciklama.getText().toString());
        intent.putExtra("titlex", editisim.getText().toString());
        PendingIntent alarmintent = PendingIntent.getBroadcast(
                hatirlatici.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT
        );
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        Calendar startalarm = Calendar.getInstance();
        startalarm.set(Calendar.HOUR_OF_DAY, hourOfDay);
        startalarm.set(Calendar.SECOND, 0);
        startalarm.set(Calendar.MINUTE, minute);
        long alarmstartTime = startalarm.getTimeInMillis();
        alarmManager.set(AlarmManager.RTC_WAKEUP, alarmstartTime, alarmintent);
    }
    private void startNotification(Calendar now){
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this,AlertReciever.class);
        intent.putExtra("Isım_ID", editisim.getText().toString());
        intent.putExtra("Aciklama", editaciklama.getText().toString());
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this,1,intent,0);
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), pendingIntent);

    }


    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        now.set(Calendar.YEAR, year);
        now.set(Calendar.MONTH, month);
        now.set(Calendar.DAY_OF_MONTH, day);
        DialogFragment timePicker = new TimePickerFragment();
        timePicker.show(getSupportFragmentManager(), "time picker");
        String Datex = DateFormat.getDateInstance(DateFormat.DATE_FIELD).format(now.getTime());
        zaman.setText(Datex);
        Calendar startalarm = Calendar.getInstance();

        startalarm.set(Calendar.DAY_OF_MONTH,day );
        startalarm.set(Calendar.YEAR, year);
        startalarm.set(Calendar.MONTH, month);
        Intent intent = new Intent(hatirlatici.this, AlertReciever.class);
        PendingIntent alarmintent = PendingIntent.getBroadcast(
                hatirlatici.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT
        );
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        long alarmstartTime = startalarm.getTimeInMillis();
        alarmManager.set(AlarmManager.RTC_WAKEUP, alarmstartTime, alarmintent);


    }
}

AlertReciever.class警报接收器类

public class AlertReciever extends BroadcastReceiver {
    private Notification notification;
    private static final String ChannelID = "Sample_Channel";

    @Override
    public void onReceive(Context context, Intent intent) {
        int NotificationId = intent.getIntExtra("notificationId", 0);
        String message = intent.getStringExtra("messagex");
        String title = intent.getStringExtra("titlex");
        Intent mainIntent = new Intent(context, hatirlatici.class);
        PendingIntent contentIntent = PendingIntent.getActivity(
                context,0,mainIntent,0
        );
  NotificationManager notificationManager =
          (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){
      CharSequence channelName = "My Notification";
      int importance = NotificationManager.IMPORTANCE_DEFAULT;
      NotificationChannel channel = new NotificationChannel(ChannelID,channelName,importance);
      notificationManager.createNotificationChannel(channel);

        }

  NotificationCompat.Builder builder = new NotificationCompat.Builder(context, ChannelID)
          .setContentText(message)
          .setContentTitle(title)
          .setContentIntent(contentIntent)
          .setPriority(NotificationCompat.PRIORITY_DEFAULT)
          .setSmallIcon(R.drawable.ic_baseline_menu_book_24);

    notificationManager.notify(NotificationId, builder.build());
    }


}

TimePickerFragment.class TimePickerFragment.class

 package com.viado;

import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;

import java.util.Calendar;

public class TimePickerFragment extends DialogFragment {

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour,minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
    }
}

DatePickerFragment.class DatePickerFragment.class

package com.viado;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;

import java.util.Calendar;

public class DatePickerFragment extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);


        return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener) getActivity(),year ,month,day);


    }
}

UPDATE更新

activty.class活动类

public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
        now.set(Calendar.HOUR_OF_DAY, hourOfDay);
        now.set(Calendar.MINUTE, minute);
        now.set(Calendar.SECOND, 0);

        Intent intent = new Intent(hatirlatici.this, AlertReciever.class);
        intent.setAction("ALERT_RECIEVER");
        intent.putExtra("notificationId", notificationId);
        intent.putExtra("messagex", editaciklama.getText().toString());
        intent.putExtra("titlex", editisim.getText().toString());

        PendingIntent alarmintent = PendingIntent.getBroadcast(
                hatirlatici.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT
        );
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        Calendar startalarm = Calendar.getInstance();
        startalarm.set(Calendar.HOUR_OF_DAY, hourOfDay);
        startalarm.set(Calendar.SECOND, 0);
        startalarm.set(Calendar.MINUTE, minute);
        long alarmstartTime = startalarm.getTimeInMillis();
        alarmManager.set(AlarmManager.RTC_WAKEUP, alarmstartTime, alarmintent);

Manifest显现

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

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".oncekipomodoro"></activity>
        <activity android:name=".settings" />
        <activity android:name=".feedback" />
        <activity android:name=".todolist" />
        <activity android:name=".hatirlatici" />
        <activity android:name=".pomodoro" />
        <activity android:name=".premium" />

        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-1122513733180723~9899208652" />

        <activity android:name=".pomodoroscreen" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <receiver android:name=".AlertReciever">
            <intent-filter>
                <action android:name="ALERT_RECIEVER" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

Your code looks fine, and I think the possible issue could be that you didn't declare the AlertReciever in manifest file, so make sure you added the below within the application tag in manifest file.您的代码看起来不错,我认为可能的问题是您没有在清单文件中声明AlertReciever ,因此请确保在清单文件的应用程序标记中添加了以下内容。 This is because BroadcastReciever is considered a system component that must be declared in manifest otherwise the onReceive() method won't be called.这是因为BroadcastReciever被视为必须在清单中声明的​​系统组件,否则onReceive()方法将不会被调用。

<application 
    ......
    <receiver android:name=".AlertReciever">
        <intent-filter>
            <action android:name="ALERT_RECIEVER" />
        </intent-filter>
    </receiver>

Also, you need to set the same action mentioned above to the intent that you create to trigger this AlertReceiver , so in your onTimeSet() method add:此外,您需要将上面提到的相同操作设置为您创建以触发此AlertReceiver的意图,因此在您的onTimeSet()方法中添加:

intent.setAction("ALERT_RECIEVER");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM