открыть окно при срабатывании сигнализации - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приложение для будильника. Я хочу, чтобы появилось окно, чтобы отменить или отложить или редактировать будильник; когда срабатывает сигнализация как я могу запустить это окно (действие и его расположение), когда срабатывает сигнализация? это основная активность:

public class MainActivity extends Activity {
    Button btn_set,btn_cancel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_set =(Button)findViewById(R.id.bSet);

        IntentFilter filter = new IntentFilter();
        filter.addAction(getPackageName() + AlarmManager.RTC_WAKEUP);
        final MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();
        registerReceiver(myReceiver, filter);

        btn_set.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startAlert();
            }
        });
    }

    public void startAlert(){
        EditText et_hour=(EditText)findViewById(R.id.etHour);
        EditText et_minute=(EditText)findViewById(R.id.etMinute);
        EditText et_second=(EditText)findViewById(R.id.etSecond);
        int i_hour=Integer.parseInt(et_hour.getText().toString());
        int i_minute=Integer.parseInt(et_minute.getText().toString());
        int i_second=Integer.parseInt(et_second.getText().toString());
        Calendar calendar=Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY,i_hour);
        calendar.set(Calendar.MINUTE,i_minute);
        calendar.set(Calendar.SECOND,i_second);
        Intent intent=new Intent(this,MyBroadcastReceiver.class);
        PendingIntent pendingIntent=PendingIntent.getBroadcast(
                this.getApplicationContext(),234324243,intent,0);
        AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
        Toast.makeText(this,"Alarm set in ...", Toast.LENGTH_LONG).show();
    }
}

и это широковещательный приемник:

public class MyBroadcastReceiver extends BroadcastReceiver {
    MediaPlayer mp;
    @Override
    public void onReceive(Context context, Intent intent){
        mp=MediaPlayer.create(context, R.raw.alarm);
        mp.start();
        Toast.makeText(context,"Alarm ...",Toast.LENGTH_LONG).show();
    }
}

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете использовать AlertDialog с transparent activity. как показано ниже:

class AlertDialogActivity : AppCompactActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        showAlertMessage(getString(R.string.app_name),"Alert message")
        startAlarmSound()
    }

    private fun startAlarmSound() {
        val alarmSound: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
        mp = MediaPlayer.create(this, alarmSound)
        mp.start()
    }

    // here using alertdialog you can use 
    private fun showAlertMessage(titile: String, msg: String) {
        AlertDialog.Builder(this)
                .setTitle(title)
                .setMessage(msg)
                .setPositiveButton("Cancel") { dialog, which ->
                    if (mp.isPlaying) mp.stop()
                    dialog.dismiss()
                    finish()
                }.setNegativeButton("Edit"){dialog, which ->
                    // handle edit options clicked here

                }.setNeutralButton("Snooze"){dialog, which ->
                    // handle Snooze options clicked here

                }.show()
    }
}

Для активности transparent вы должны настроить свою activity тему следующим образом

<style name="TransparentTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
</style>

А внутри вашего файла manifest используйте custom theme для AlertDialogActivity:

<activity android:name="AlertDialogActivity"
            android:theme="@style/TransparentTheme"/>

А с вашего BroadcastReceiver позвоните своему AlertDialogActivity, как показано ниже:

public void onReceive(Context context, Intent intent){
        // ....
        showAlert(context);
    }

 private void showAlert(Context context) {
        Intent intent = new Intent(context, AlertDialogActivity.class);
        intent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...