问题描述
我的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 (将#修改为@)