1

В следующем SSCCE я пытаюсь вызвать явное намерение от preferences.xml, чтобы открыть вид деятельности, который находится в одном и только пакете в приложении, в котором находится вся деятельность.ActivityNotFoundException при попытке вызвать «явное» намерение из «Предпочтения» для открытия действия в пакете по умолчанию?

Но я получаю следующее исключение:

android.content.ActivityNotFoundException: No Activity found to handle Intent { } 

Я видел this question, но речь идет о запуске процессов в другом пакете, и кто-то сказал в этом вопросе, что их приложение, чтобы открыть активность в работах пакетов по умолчанию хорошо.

Ниже приводятся соответствующие части кода.

Примечание: Поскольку SecondActivity находится в том же пакете, как MainActivity, я сначала пытался использовать только одинandroid:targetClass атрибут к <intent> в preferences.xml, но после исключения я тоже добавил android:targetPackage, но это не решило проблему.

MainActivty.java:

package practice.preferences_practice; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class MainActivity extends PreferenceActivity { 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 

    <Preference android:key="@+id/preferences_preference_preferenceContainingIntent" 
     android:title="@string/preferences_preference_preferenceContainingIntent_title" 
     android:summary="@string/preferences_preference_preferenceContainingIntent_summary" > 


     <intent android:targetPackage="practice.preferences_practice" 
      android:targetClass="practice.preferences_practice.SecondActivity" /> 


    </Preference> 

</PreferenceScreen> 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="practice.preferences_practice" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="23" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SecondActivity" 
      android:label="@string/title_activity_second" > 
     </activity> 
    </application> 

</manifest> 

ПРИМЕЧАНИЕ: Я не использовал <intent-filter> в манифесте для SecondActivity, потому что он находится в том же пакете по умолчанию, что и MainActivity, который является practice.preferences_practice.

ПРИМЕЧАНИЕ: Если вы считаете, что я должен опубликовать все другие файлы кода, пожалуйста, дайте мне знать.




РЕДАКТИРОВАТЬ:

разреш/значения/strings.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">Preferences Practice</string> 
    <string name="hello_world">Hello world!</string> 

    <string name="preferences_preference_preferenceContainingIntent_title">Preferece Title</string> 
    <string name="preferences_preference_preferenceContainingIntent_summary">Opens another activity because this preference contains and invokes an Intent.</string> 

    <string name="title_activity_second">SecondActivity</string> 

</resources> 

разреш/макет/Activity_ second.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#F4A460" 
    tools:context="${relativePackage}.${activityClass}" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

</RelativeLayout> 

SecondActivity.Java:

package practice.preferences_practice; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

public class SecondActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
    } 
} 
+0

Вы нацеливаете SecondActivity, но добавляете addPreferencesFromResource (R.xml.preferences); в MainActivity. –

+0

@ O'one "вы добавляете addPreferencesFromResource (R.xml.preferences), в MainActivity" - потому что я хочу добавить настройки в MainActivity. Это пример приложения, а моя MainActivity - это PreferenceActivity - он отображает список предпочтений. «Вы нацеливаетесь на SecondActivity» - Да. «MainActivity» отображает предпочтение (в этом приложении есть только один элемент предпочтения, в противном случае будут отображаться параметры _list of_), и когда пользователь нажимает на «Предпочтение» (единственное в этом случае), «SecondActivity» должен открытый. ** Я что-то упустил? ** – Solace

+0

добавьте это внутреннее предпочтение, а затем запишите тег. android: action = "android.intent.action.VIEW" –

ответ

2

Вы код как и должно быть. Он работает очень хорошо, так как я также тестировал его. Попробуйте очистить проект и переустановить apk.

+0

Работал для меня тоже. При этом этот ответ кажется неполным. – StarWind0

0

Используйте startActivity(new Intent(MainActivity.this, SecondActivity.class));, чтобы начать вторую деятельность.

+0

Это НЕ отвечает на вопрос. Я знаю, как программно запускать Activity from another Activity. Вопрос в том, _why ли не намерение, указанное в настройках, успешно запустить Activity? Что мне не хватает? Где я делаю ошибку? _ Я предлагаю вам удалить этот ответ, прежде чем он будет опущен. – Solace

Смежные вопросы