我想为 Android TV 制作一个应用程序,所以我使用 Android Studio 中默认的 Android TV Activity 作为我的项目模板,我想在 VideoDetailsFragment 中添加一个按钮,该按钮仅出现在包管理器之后检测到辅助 Activity 处于 Activity 状态。
如果包管理器检测到我的辅助 Activity 处于 Activity 状态并且正在运行,它应该显示一个按钮来禁用它,如果该 Activity 被禁用,它应该显示一个按钮来启用它,但是...包管理器无法获取 Activity 的名称,它实际上无法获取任何包或 Activity 的名称,它总是显示 NameNotFoundException
我的两个 Activity 都是 android:name="android.intent.action.MAIN “
在 list 中,因为我想从启动器添加两者的启动 Intent ,但辅助 Activity 具有标签 android:enabled="false"
因为我想放置按钮VideoDetailsFragment 中的内容应该启用和禁用该 Activity 。
这是我的 list :
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.software.leanback"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Leanback">
<activity
android:name=".MainActivity"
android:banner="@mipmap/banner"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:logo="@mipmap/banner"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DetailsActivity" />
<activity android:name=".PlaybackOverlayActivity" />
<activity android:name=".BrowseErrorActivity" />
<activity android:name=".SecondaryActivity"
android:icon="@mipmap/ic_launcher"
android:banner="@mipmap/banner"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
</application>
这是VideoDetailsFragment代码:
private void setupDetailsOverviewRow() {
Log.d(TAG, "doInBackground: " + mSelectedMovie.toString());
final DetailsOverviewRow row = new DetailsOverviewRow(mSelectedMovie);
row.setImageDrawable(getResources().getDrawable(R.drawable.default_background));
int width = Utils.convertDpToPixel(getActivity()
.getApplicationContext(), DETAIL_THUMB_WIDTH);
int height = Utils.convertDpToPixel(getActivity()
.getApplicationContext(), DETAIL_THUMB_HEIGHT);
Glide.with(getActivity())
.load(mSelectedMovie.getCardImageUrl())
.centerCrop()
.error(R.drawable.default_background)
.into(new SimpleTarget<GlideDrawable>(width, height) {
@Override
public void onResourceReady(GlideDrawable resource,
GlideAnimation<? super GlideDrawable>
glideAnimation) {
Log.d(TAG, "details overview card image url ready: " + resource);
row.setImageDrawable(resource);
mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size());
}
});
/******************************/
/*HERE IS THE PROBLEMATIC CODE*/
/******************************/
PackageManager pm = getActivity().getPackageManager();
ComponentName cn = new ComponentName(getActivity(), "com.valecast.myapp.SecondaryActivity");
ActivityInfo info = pm.getActivityInfo(cn, 0); //<===IT NEVER LOCATE THIS
if (info != null && info.enabled) {
// Component is enabled
row.addAction(new Action(ACTION_BUY, "it works"));
} else {
// Component is disabled
row.addAction(new Action(ACTION_BUY, "it doesn't"));
}
/******************************/
row.addAction(new Action(ACTION_WATCH_TRAILER, getResources().getString(
R.string.watch_trailer_1), getResources().getString(R.string.watch_trailer_2)));
row.addAction(new Action(ACTION_RENT, getResources().getString(R.string.rent_1),
getResources().getString(R.string.rent_2)));
row.addAction(new Action(ACTION_BUY, getResources().getString(R.string.buy_1),
getResources().getString(R.string.buy_2)));
mAdapter.add(row);
}
这是 android studio 中错误显示的屏幕截图:
这是另一个屏幕截图,显示了建议的答案之一,但它也不起作用:
我将其包装到 try catch 中,但是当我运行我的应用程序时,它总是在 Android 监视器中抛出 NameNotFoundException
。
我做错了什么?
最佳答案
您需要定义正确的组件名称:
new ComponentName("com.valecast.myapp", "com.valecast.myapp.SecondaryActivity");
并尝试一下:
try {
ActivityInfo info = pm.getActivityInfo(cn, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
关于java - 无法从 Android Leanback 应用程序中的 VideoDetailsFragment 访问 getPackageManager GetActivityInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40990974/