我的Android TV应用只能在Android TV模拟器Android Studio上运行

问题描述

我的Android TV应用仅在Android TV Emulator(Android Studio)上运行。 当我在电视盒上安装该应用程序时,该应用程序崩溃了

这是我的Android清单和活动

Androidmanifest:

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

    <uses-feature
        android:name="android.software.leanback"
        android:required="true" />
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.BLUetoOTH" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"

        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning">

        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.ErrorActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.VideoDetailsActivity2" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.VideoDetailsActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.SignUpActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.PlayerActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.LoginActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.ItemGenreActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.ItemCountryActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.ActivationActivity" />
        <activity android:name="com.tvonhd.uniplaytvBox.ui.activity.SearchActivity" />
        <activity
            android:name="com.tvonhd.uniplaytvBox.ui.activity.LeanbackActivity"
            android:theme="@style/AppTheme" />

        <activity
            android:name="com.tvonhd.uniplaytvBox.ui.activity.SplashScreenActivity"
            android:banner="@drawable/ic_launcher_tv"
            android:icon="@drawable/ic_launcher_tv"
            android:roundIcon="@drawable/ic_launcher_tv"
            android:logo="@drawable/ic_launcher_tv">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.tvonhd.uniplaytvBox.ui.activity.LoginChooserActivity"
            android:screenorientation="fullSensor"
            android:windowSoftInputMode="stateHidden|adjustResize" />
        <activity android:name="com.tvonhd.uniplaytvBox.MainActivity" />
    </application>

</manifest>

这是我的活动

活动:

```
package com.tvonhd.uniplaytvBox.fragments;

import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Toast;

import androidx.fragment.app.FragmentManager;
import androidx.leanback.app.RowsSupportFragment;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.HeaderItem;
import androidx.leanback.widget.ListRow;
import androidx.leanback.widget.ListRowPresenter;
import androidx.leanback.widget.OnItemViewClickedListener;
import androidx.leanback.widget.OnItemViewSelectedListener;
import androidx.leanback.widget.Presenter;
import androidx.leanback.widget.Row;
import androidx.leanback.widget.RowPresenter;

import com.tvonhd.uniplaytvBox.Config;
import com.tvonhd.uniplaytvBox.NetworkInst;
import com.tvonhd.uniplaytvBox.utils.PreferenceUtils;
import com.tvonhd.uniplaytvBox.R;
import com.tvonhd.uniplaytvBox.database.DatabaseHelper;
import com.tvonhd.uniplaytvBox.model.Channel;
import com.tvonhd.uniplaytvBox.model.HomeContent;
import com.tvonhd.uniplaytvBox.model.VideoContent;
import com.tvonhd.uniplaytvBox.network.RetrofitClient;
import com.tvonhd.uniplaytvBox.network.api.HomeApi;
import com.tvonhd.uniplaytvBox.ui.BackgroundHelper;
import com.tvonhd.uniplaytvBox.ui.activity.ErrorActivity;
import com.tvonhd.uniplaytvBox.ui.activity.LeanbackActivity;
import com.tvonhd.uniplaytvBox.ui.activity.PlayerActivity;
import com.tvonhd.uniplaytvBox.ui.activity.VideoDetailsActivity;
import com.tvonhd.uniplaytvBox.ui.presenter.CardPresenter;
import com.tvonhd.uniplaytvBox.ui.presenter.SliderCardPresenter;
import com.tvonhd.uniplaytvBox.ui.presenter.TvPresenter;
import com.tvonhd.uniplaytvBox.utils.PaidDialog;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;

public class HomeFragment extends RowsSupportFragment {

    private BackgroundHelper bgHelper;
    private ArrayObjectAdapter rowsAdapter;
    private CardPresenter cardPresenter;
    private View v;

    private LeanbackActivity activity;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        bgHelper = new BackgroundHelper(getActivity());
        activity = (LeanbackActivity) getActivity();
        activity.showlogo();


        setonItemViewClickedListener(getDefaultItemViewClickedListener());
        setonItemViewSelectedListener(getDefaultItemSelectedListener());


        if (new NetworkInst(activity).isNetworkAvailable()) {
            loadHomeContent();
        } else {
            Intent intent = new Intent(activity,ErrorActivity.class);
            startActivity(intent);
            activity.finish();
        }

    }


    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        v = super.onCreateView(inflater,container,savedInstanceState);
        return v;
    }


    private void loadHomeContent() {

        final SpinnerFragment mSpinnerFragment = new SpinnerFragment();
        final FragmentManager fm = getFragmentManager();
        fm.beginTransaction().add(R.id.custom_frame_layout,mSpinnerFragment).commit();

        Retrofit retrofit = RetrofitClient.getRetrofitInstance();
        HomeApi api = retrofit.create(HomeApi.class);
        Call<List<HomeContent>> call = api.getHomeContent(Config.API_KEY);
        call.enqueue(new Callback<List<HomeContent>>() {
            @Override
            public void onResponse(Call<List<HomeContent>> call,Response<List<HomeContent>> response) {
                if (response.isSuccessful()) {
                    List<HomeContent> homeContents = response.body();
                    //Log.d("size:",homeContents.size()+"");

                    if (homeContents.size() > 0) {
                        loadRows(homeContents);
                    } else {
                        Toast.makeText(getContext(),getResources().getString(R.string.no_data_found),Toast.LENGTH_SHORT).show();
                    }


                } else {
                    Toast.makeText(getContext(),response.errorBody().toString(),Toast.LENGTH_SHORT).show();
                }

                // hide the spinner
                fm.beginTransaction().remove(mSpinnerFragment).commitAllowingStateLoss();
            }

            @Override
            public void onFailure(Call<List<HomeContent>> call,Throwable t) {
                t.printstacktrace();
                Toast.makeText(getContext(),t.getMessage(),Toast.LENGTH_SHORT).show();
                // hide the spinner
                getFragmentManager().beginTransaction().remove(mSpinnerFragment).commit();
            }
        });
    }

    private void loadRows(List<HomeContent> homeContents) {

        rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
        cardPresenter = new CardPresenter();
        SliderCardPresenter sliderCardPresenter = new SliderCardPresenter();
        TvPresenter tvPresenter = new TvPresenter();


        int i;
        for (i = 0; i < homeContents.size(); i++) {
            ArrayObjectAdapter listRowAdapter;
            HeaderItem header;
            if (i == 0) {
                // load slider
                listRowAdapter = new ArrayObjectAdapter(sliderCardPresenter);
                header = new HeaderItem(i,"");
            } else if (i == 1) {
                //load tv layout
                listRowAdapter = new ArrayObjectAdapter(tvPresenter);
                header = new HeaderItem(i,homeContents.get(i).getTitle());
            } else {
                listRowAdapter = new ArrayObjectAdapter(cardPresenter);
                header = new HeaderItem(i,homeContents.get(i).getTitle());
            }
            //for (int j = 0; j < NUM_COLS; j++) {
            for (int j = 0; j < homeContents.get(i).getContent().size(); j++) {

                VideoContent videoContent = homeContents.get(i).getContent().get(j);

                if (homeContents.get(i).getType().equalsIgnoreCase("tv")) {
                    videoContent.setType("tv");
                } else if (homeContents.get(i).getType().equalsIgnoreCase("movie")) {
                    videoContent.setType("movie");
                } else if (homeContents.get(i).getType().equalsIgnoreCase("tvseries")) {
                    videoContent.setType("tvseries");
                } else if (homeContents.get(i).getType().equalsIgnoreCase("slider")) {
                    if (videoContent.getIsTvseries().equals("1")) {
                        videoContent.setType("tvseries");
                    } else if (videoContent.getIsTvseries().equals("0")) {
                        videoContent.setType("movie");
                    }
                }

                listRowAdapter.add(videoContent);
            }
            rowsAdapter.add(new ListRow(header,listRowAdapter));
        }

        setAdapter(rowsAdapter);

        setCustomPadding();

    }

    private void setCustomPadding() {
//        getView().setPadding(Utils.dpToPx(-24,getContext()),Utils.dpToPx(70,0);
    }


    // click listener
    private OnItemViewClickedListener getDefaultItemViewClickedListener() {
        return new OnItemViewClickedListener() {
            @Override
            public void onItemClicked(Presenter.ViewHolder viewHolder,Object o,RowPresenter.ViewHolder viewHolder2,Row row) {

                VideoContent videoContent = (VideoContent) o;

                String status = new DatabaseHelper(getContext()).getActiveStatusData().getStatus();

                if (videoContent.getType().equals("tv")) {
                    if (videoContent.getIsPaid().equals("1")) {
                        if (PreferenceUtils.isValid(getActivity())) {
                            if (status.equals("active")) {
                                Intent intent = new Intent(getActivity(),PlayerActivity.class);
                                intent.putExtra("id",videoContent.getId());
                                intent.putExtra("videoType",videoContent.getStreamFrom());
                                intent.putExtra("streamUrl",videoContent.getStreamUrl());
                                startActivity(intent);
                            } else {
                                //subscription is not active
                                //new PaidDialog(getActivity()).showPaidContentAlertDialog();
                                PaidDialog dialog = new PaidDialog(getContext());
                                dialog.getwindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                                dialog.getwindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);
                                dialog.show();
                            }
                        } else {
                            //saved data is not valid,because it was saved more than 2 hours ago
                            PreferenceUtils.updateSubscriptionStatus(getActivity());
                        }
                    } else {
                        Intent intent = new Intent(getActivity(),PlayerActivity.class);
                        intent.putExtra("id",videoContent.getId());
                        intent.putExtra("videoType",videoContent.getStreamFrom());
                        intent.putExtra("streamUrl",videoContent.getStreamUrl());
                        startActivity(intent);
                    }

                } else {
                    Intent intent = new Intent(getActivity(),VideoDetailsActivity.class);
                    intent.putExtra("id",videoContent.getId());
                    intent.putExtra("type",videoContent.getType());
                    intent.putExtra("thumbImage",videoContent.getThumbnailUrl());

                    startActivity(intent);
                }


            }
        };
    }


    //listener for setting blur background each time when the item will select.
    protected OnItemViewSelectedListener getDefaultItemSelectedListener() {
        return new OnItemViewSelectedListener() {
            public void onItemSelected(Presenter.ViewHolder itemViewHolder,final Object item,RowPresenter.ViewHolder rowViewHolder,Row row) {

                if (item instanceof VideoContent) {
                    bgHelper = new BackgroundHelper(getActivity());
                    bgHelper.prepareBackgroundManager();
                    bgHelper.startBackgroundTimer(((VideoContent) item).getPosterUrl());
                } else if (item instanceof Channel) {

                    bgHelper = new BackgroundHelper(getActivity());
                    bgHelper.prepareBackgroundManager();
                    bgHelper.startBackgroundTimer(((Channel) item).getPosterUrl());

                }

            }
        };
    }

}

我的Android TV应用仅在Android TV Emulator(Android Studio)上运行。当我在电视盒上安装应用程序时,该应用程序崩溃。此错误是由回缩引起的吗? 谢谢您的帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)