Мое android приложение продолжает зависать при воспроизведении видео с Youtube - PullRequest
0 голосов
/ 31 марта 2020

У меня серьезная проблема с моей программой будильника. Сначала все прошло отлично. Но после того, как я попытался создать всплывающее окно, содержащее кнопку для воспроизведения видео на YouTube (при срабатывании будильника), оно продолжает падать.

Сначала файл ids. xml был полностью пустым, поэтому я попытался заполнить все возможные идентификаторы из. XML файлов

    <resources>
    android:id="@+id/update_text"
    android:id="@+id/youtube_player_view"
    android:id="@+id/open_video"
    android:id="@+id/richard_spinner"
    android:id="@+id/alarm_off"
    android:id="@+id/alarm_on"
    android:id="@+id/toolbar"
</resources>

Затем я посмотрел на Класс MainActivity и проверил все скобки, скобки, позиции блоков кода ... в течение двух часов подряд, но безрезультатно. Класс MainActivity после добавления функции видео выглядит следующим образом:

copackage com.example.maalarm.finalalarm;

import ...


public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    YouTubePlayerView youTubePlayerView;
    Button button;
    YouTubePlayer.OnInitializedListener onInitializedListener;

    //to make our alarm manager
    AlarmManager alarmManager;
    TimePicker alarmTimePicker;
    TextView updateText;
    Context context;
    PendingIntent pendingIntent;
    int chooseRingTone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        this.context = this;
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmTimePicker = (TimePicker) findViewById(R.id.timePicker);
        updateText = (TextView) findViewById(R.id.update_text);
        final Calendar calendar = Calendar.getInstance();
        final Intent myIntent = new Intent(this.context, Alarm_Receiver.class);

        // open video button
        // when open video button is pressed
        button = (Button) findViewById(R.id.open_video);
        youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player_view);
        onInitializedListener = new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
                youTubePlayer.loadVideo("AcCfvmtIUAQ");
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

            }
        };
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                youTubePlayerView.initialize(PlayerConfig.API_KEY,onInitializedListener);
            }
        });

        // spinner/ drop-down list
        Spinner spinner = (Spinner) findViewById(R.id.richard_spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.alarm_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);

        // alarm on button
        Button alarm_on = (Button) findViewById(R.id.alarm_on);
        alarm_on.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.M)
            @Override
            public void onClick(View v) {

                calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
                calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());

                int hour = alarmTimePicker.getHour();
                int minute = alarmTimePicker.getMinute();

                String hour_string = String.valueOf(hour);
                String minute_string = String.valueOf(minute);

                if (hour > 12) {
                    hour_string = String.valueOf(hour - 12);
                }

                if (minute < 10) {
                    //10:7 --> 10:07
                    minute_string = "0" + String.valueOf(minute);
                }

                set_alarm_text("Alarm set to: " + hour_string + ":" + minute_string);
                myIntent.putExtra("extra", "alarm on");
                myIntent.putExtra("ring_tone_choice", chooseRingTone);
                Log.e("The ringtone id is" , String.valueOf(chooseRingTone));
                pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,
                        myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                        pendingIntent);
            }
        });

        // alarm off button
        Button alarm_off = (Button) findViewById(R.id.alarm_off);
        alarm_off.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // method that changes the update text Textbox
                set_alarm_text("Alarm off!");

                // cancel the alarm
                alarmManager.cancel(pendingIntent);

                // put extra string into myIntent
                // tells the clock that you pressed the "alarm off" button
                myIntent.putExtra("extra", "alarm off");
                myIntent.putExtra("ring_tone_choice", chooseRingTone);

                // stop the ringtone
                sendBroadcast(myIntent);
            }
        });
    }

    private void set_alarm_text(String output) {
        updateText.setText(output);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        chooseRingTone = (int) id;
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback

    }
}

Блок кода над счетчиком был добавлен недавно, поэтому это может быть проблемой. Кроме того, у меня есть этот файл. XML:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark"
    android:fitsSystemWindows="true"
    tools:context="com.example.maalarm.finalalarm.MainActivity">


    <Button
        android:id="@+id/open_video"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/youtube_player_view"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="177dp"
        android:clickable="true"
        android:focusable="true"
        android:text="OPEN VID"
        tools:ignore="HardcodedText" />

    <com.google.android.youtube.player.YouTubePlayerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/youtube_player_view"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

Но, похоже, с этим проблем нет. Не могли бы вы предложить способ решить эту проблему? Я немного отчаялся, и у меня закончились возможные пути отладки. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...