无法在 android TV Preferences 片段中找到提供者

Posted

技术标签:

【中文标题】无法在 android TV Preferences 片段中找到提供者【英文标题】:Failed to find provider in android TV Preferences fragment 【发布时间】:2019-03-30 20:42:10 【问题描述】:

无法为用户 0 找到提供程序 com.google.android.katniss.search.searchapi.VoiceInteractionProvider;预计会为此权限找到一个有效的 ContentProvider 用于 tv Preference Fragment

E/AndroidRuntime: 致命异常: main 进程:com.omniwyse.tvprefdemo,PID:2025 java.lang.RuntimeException:无法启动活动 ComponentInfocom.omniwyse.tvprefdemo/com.omniwyse.tvprefdemo.SettingActivity:android.view.InflateException:二进制 XML 文件第 18 行:二进制 XML 文件第 18 行:膨胀类错误 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 引起:android.view.InflateException:二进制 XML 文件第 18 行:二进制 XML 文件第 18 行:膨胀类错误 引起:android.view.InflateException:二进制 XML 文件第 18 行:膨胀类错误 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:343) 在 android.view.LayoutInflater.createView(LayoutInflater.java:647) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.support.v17.preference.BaseLeanbackPreferenceFragment.onCreateRecyclerView(BaseLeanbackPreferenceFragment.java:42) 在 android.support.v14.preference.PreferenceFragment.onCreateView(PreferenceFragment.java:270) 在 android.support.v17.preference.LeanbackPreferenceFragment.onCreateView(LeanbackPreferenceFragment.java:54) 在 android.app.Fragment.performCreateView(Fragment.java:2522) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) 在 android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2426) 在 android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2205) 在 android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2161) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2062) 在 android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3051) 在 android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2998) 在 android.app.Fragment.performActivityCreated(Fragment.java:2537) 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1318) 在 android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2426) 在 android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2205) 在 android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2161) 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2062) 在 android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3051) 在 android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2998) 在 android.app.FragmentController.dispatchActivityCreated(FragmentController.java:182) 在 android.app.Activity.performCreate(Activity.java:7143) 在 android.app.Activity.performCreate(Activity.java:7127) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)

     public class SettingsFragment extends LeanbackSettingsFragment 
@Override
public void onPreferenceStartInitialScreen() 

    startPreferenceFragment(new PrefsFragment());


@Override
public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) 
    final Fragment f =
            Fragment.instantiate(getActivity(), pref.getFragment(), pref.getExtras());
    f.setTargetFragment(caller, 0);
    if (f instanceof PreferenceFragment || f instanceof PreferenceDialogFragment) 
      //  startPreferenceFragment(f);
     else 
       // startImmersiveFragment(f);
    
    return true;


@Override
public boolean onPreferenceStartScreen(PreferenceFragment caller, PreferenceScreen pref) 
    final Fragment f = new PrefsFragment();
    final Bundle args = new Bundle(1);
    args.putString(PreferenceFragment.ARG_PREFERENCE_ROOT, pref.getKey());
    f.setArguments(args);
    startPreferenceFragment(f);
    return true;

@SuppressLint("ValidFragment") 公共类 PrefsFragment 扩展 LeanbackPreferenceFragment

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) 
    // Load the preferences from an XML resource
    setPreferencesFromResource(R.xml.preferences, rootKey);

【问题讨论】:

先分享你的代码 你能检查我是否添加了 错误在 xml 文件的第 18 行。仔细阅读错误日志猫。检查您的 xml 文件 在我的 xml 中没有第 18 行实际上是来自leanback 库类的错误 我解决了这个问题。我们必须为宿主活动设置主题为 @style/PreferenceThemeOverlay.v14.Leanback 【参考方案1】:

我通过更改主题偏好Theme.Leanback

解决这个问题

在您的清单文件中:

<activity android:name=".ui.setting.YourSettingPrefActivity"
        android:exported="true"
        android:theme="@style/Theme.Pref.LeanbackPreferences"/>

这里是styles.xml

<style name="Theme.Pref.LeanbackPreferences" parent="Theme.Leanback">
    <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Leanback</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:colorPrimary">@color/fastlane_background</item>
</style>

【讨论】:

以上是关于无法在 android TV Preferences 片段中找到提供者的主要内容,如果未能解决你的问题,请参考以下文章

XMLHttprequest 无法使用 twitch.tv api

无法在 android TV Preferences 片段中找到提供者

linux网路编程--网络超时检测

安装后无法打开 Android TV 应用程序

Flutter 应用程序在 Android TV 上安装但无法打开,为啥?

无法通过 Apple Configurator 2 在 Apple TV 上安装 Charles Proxy 配置文件