[英]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.