0

Android TV用のアプリを作成したいので、AndroidスタジオでデフォルトのAndroid TVアクティビティをプロジェクトのテンプレートとして使用していますVideoDetailsFragmentでは、このボタンは、パッケージマネージャがセカンダリアクティビティがアクティブであることを検出した後にのみ表示されます。Android LeanbackアプリのVideoDetailsFragmentからgetPackageManager GetActivityInfoにアクセスできません

二次アクティビティがアクティブで実行中であることがパッケージマネージャによって検出された場合、無効にするボタンが表示され、アクティビティが無効になっている場合は有効にするボタンが表示されますが...パッケージマネージャは取得できませんアクティビティの名前、実際にパッケージやアクティビティの名前を取得することはできません。常にNameNotFoundExceptionの両方のアクティビティを表示するようにします。android:name="android.intent.action.MAIN"はマニフェストです。ランチャから両方の起動インテントを追加したいので、アクティビティのラベルはandroid:enabled="false"です.VideoDetailsFragmentに挿入するボタンは、そのアクティビティを有効または無効にするためのものです。ここで

は私のマニフェストです:ここでは

<?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); 
} 

そして、ここでは、エラーのショーのスクリーンショットですアンドロイドtudio:

Screenshot

ここでは、提案の答えの一つを示す別のスクリーンショットですが、それはどちらも動作しません。

enter image description here

私は、tryキャッチにそれを包んだ、しかし、ときに私私のアプリを実行すると、常にAndroidモニターにNameNotFoundExceptionが投げ込まれます。

私は間違っていますか?

new ComponentName("com.valecast.myapp", "com.valecast.myapp.SecondaryActivity"); 

とトライキャッチがあります:

答えて

1

あなたは適切なコンポーネント名を定義する必要が

try { 
    ActivityInfo info = pm.getActivityInfo(cn, 0); 
} catch (PackageManager.NameNotFoundException e) { 
    e.printStackTrace(); 
} 
+0

はありがとうを、どちらもそのように動作しないように思われません、私は私の質問を更新しました2回目のスクリーンショットがあります。 –

+0

あなたはそれを試しにキャッチする必要があります – petrumo

+0

もう一度同じエラーが表示されましたが、今回はアンドロイドモニター –

関連する問題