AlarmManager не работает - PullRequest
       29

AlarmManager не работает

0 голосов
/ 26 августа 2018

Я пытаюсь создать более сложное приложение, но не смог правильно использовать AlarmManager для открытия действия.Я попытался переписать код, чтобы понять суть того, что мне не хватает, но он все еще не работает правильно.

Приложение в основном просто принимает ввод минут и часов вместе с кнопкой запуска, ипредполагается открыть второе действие, когда время введено.Однако второе действие никогда не открывается, когда я вхожу, и кажется, что ничего в LogCat не меняется.Вот мой текущий код:

МАНИФЕСТ:

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

<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=".AlarmReceiver2" >

        <intent-filter>
            <action android:name="android.intent.alarmclock.ALARM_ALERT" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
    <activity android:name=".AlarmReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>
</manifest>

MainActivity:

   public class MainActivity extends AppCompatActivity {
    Calendar c;
    PendingIntent pendingIntent;
    AlarmManager alarmManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        c = Calendar.getInstance();
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        final EditText hour = (EditText) findViewById(R.id.hour);
        final EditText minute = (EditText) findViewById(R.id.minute);
        Button button = (Button) findViewById(R.id.press);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                c.set(Calendar.HOUR_OF_DAY, (Integer.parseInt(hour.getText().toString())));
                c.set(Calendar.MINUTE, Integer.parseInt(minute.getText().toString()));
                c.set(Calendar.SECOND,0);
                c.set(Calendar.MILLISECOND,0);
                Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
                pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    alarmManager.setExact(AlarmManager.RTC_WAKEUP,  c.getTimeInMillis(), pendingIntent);
                }
                Toast.makeText(MainActivity.this, "Alarm Set.", LENGTH_LONG).show();
            }
        });
    }
}

2-йактивность:

public class AlarmReceiver extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm_receiver);
    }
}

BroadcastReceiver:

public class AlarmReceiver2 extends BroadcastReceiver {


        @Override
        public void onReceive(Context context, Intent intent) {
            Intent intent2 = new Intent(context, AlarmReceiver.class);
            Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
            context.startActivity(intent2);
        }
    }

1 Ответ

0 голосов
/ 26 августа 2018

Исходя из вашего кода, я думаю, вы хотите запустить Activity или Broadcast по прошествии некоторого времени, используя AlarmManager.

Для запуска действия ( AlarmReceiver ).

public class MainActivity extends AppCompatActivity {

    PendingIntent pendingIntent;
    AlarmManager alarmManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        final EditText hour = (EditText) findViewById(R.id.hour);
        final EditText minute = (EditText) findViewById(R.id.minute);
        Button button = (Button) findViewById(R.id.press);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int hours = Integer.parseInt(hour.getText().toString());
                int minutes = Integer.parseInt(minute.getText().toString());

                Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
                pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

                // 1 hour = 60 minutes = 3600 seconds = 3600000 milliseconds.
                long timeFromNowInMilliseconds = (hours * 3600000) + (minutes * 60000);

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeFromNowInMilliseconds, pendingIntent);
                }
                Toast.makeText(MainActivity.this, "Alarm Set.", LENGTH_LONG).show();
            }
        });
    }
}

Чтобы начать трансляцию ( AlarmReceiver2 )

public class MainActivity extends AppCompatActivity {

    PendingIntent pendingIntent;
    AlarmManager alarmManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        final EditText hour = (EditText) findViewById(R.id.hour);
        final EditText minute = (EditText) findViewById(R.id.minute);
        Button button = (Button) findViewById(R.id.press);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int hours = Integer.parseInt(hour.getText().toString());
                int minutes = Integer.parseInt(minute.getText().toString());

                Intent intent = new Intent(MainActivity.this, AlarmReceiver2.class);
                pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

                // 1 hour = 60 minutes = 3600 seconds = 3600000 milliseconds.
                long timeFromNowInMilliseconds = (hours * 3600000) + (minutes * 60000);

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeFromNowInMilliseconds, pendingIntent);
                }
                Toast.makeText(MainActivity.this, "Alarm Set.", LENGTH_LONG).show();
            }
        });
    }
}
...