Когда я перезагружаю свой телефон, мое приложение будильника не работает - PullRequest
0 голосов
/ 25 апреля 2018

Я пытался создать свой собственный будильник в Android.Цель состоит в том, чтобы мой будильник воспроизводил разные песни на основе моего плейлиста.Это проект колледжа.Пользователь устанавливает будильник и затем забывает, а затем даже после нескольких перезапусков будильник должен воспроизводиться.Я скачал пример кода и работал над этим.Однако при перезагрузке телефона мои тревоги теряются.Я обнаружил, что мне нужно использовать вещательный приемник, но он все еще не работает на моем телефоне.Можете ли вы предложить, если этот код в порядке.Вот моя кодовая ссылка: https://drive.google.com/file/d/1ADVyH0grEQ4g80HkFU1n2Cb4wxnQC4TX/view?usp=sharing

мой файл манифеста Android - это *

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.alarmmanager">
    <uses-permission android:name="android.permission.VIBRATE" />
    <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=".MainActivity">
            <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>

</manifest>

мой файл макета ...

    <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"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="28dp"
        android:ems="10"
        android:hint="Number of seconds"
        android:inputType="numberDecimal" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/time"
        android:layout_below="@+id/time"
        android:layout_marginRight="60dp"
        android:layout_marginTop="120dp"
        android:text="Start" />

</RelativeLayout>

мой код получателя..

    package com.alarmmanager;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.util.Log;
import android.widget.Toast;

import java.util.Calendar;

/**
 * Created by bhaskar on 24-04-2018.
 *
 */

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

mainActivity файл

public class MainActivity extends AppCompatActivity {
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b1=(Button) findViewById(R.id.button1);

    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            startAlert();
        }
    });
}
public void startAlert() {
    EditText text = (EditText) findViewById(R.id.time);
    int i = Integer.parseInt(text.getText().toString());
    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, System.currentTimeMillis()
            + (i * 1000), pendingIntent);
    Toast.makeText(this, "Alarm set in " + i + " seconds", Toast.LENGTH_LONG).show();
}

}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Для меня это работает только когда я включаю автозапуск enter image description here

0 голосов
/ 25 апреля 2018

см. официальный документ для поддержания тревоги при перезагрузке телефона.в Запуск тревоги при загрузке устройства раздел

После получения фактического кода я редактирую этот ответ:

1) создайте новый получатель вместо использования старого получателя

public class SampleBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            // Set the alarm here.
            Log.d("AlarmDone", "AlarmDone");
        }
    }
}

2) зарегистрируйте его в файле манифеста:

<receiver
            android:name=".SampleBootReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>

3) измените старый код получателя в манифесте:

<receiver android:name=".AlarmReceiver" />

Примечание : добавить разрешение в манифесте

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

теперь ваш будильник зазвонит.

...