Android:找不到处理意图的活动错误?如何解决

56

如何解决"No Activity found to handle Intent"错误。

Preference customPref = (Preference) findPreference("DataEntryScreen"); 
   customPref
        .setOnPreferenceClickListener(new OnPreferenceClickListener() {
         public boolean onPreferenceClick(Preference preference) {                  

        Intent i = new Intent("com.scytec.datamobile.vd.gui.android.AppPreferenceActivity");
                 startActivity(i);
                  return true;                                        
               }
           });

1
你在清单文件中注册了该活动的意图过滤器("com.scytec.datamobile.vd.gui.android.AppPreferenceActivity")吗? - Karthik
1
不行。怎么办?请写出正确的意图?我的意思是代码。 - Ahmad Arslan
1
请在此处发布您的清单文件(包括与活动 - AppPreferenceActivity 相对应的条目),然后我们可以为您提供正确的代码帮助。 - Karthik
<uses-permission <application android:name="DataMobileApplication" android:label="@string/app_name" android:icon="@drawable/sfa" android:theme="@style/DataMobileTheme"> <activity android:name="Settings" android:label="@string/app_name" android:theme="@style/DataMobileTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.setting" /> </intent-filter> </activity> </application> - Ahmad Arslan
公共类AppPreferenceActivity扩展自Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); } } - Ahmad Arslan
1
清单文件中没有AppPreferenceActivity吗?您可以编辑您的问题,发布清单文件内容。请勿使用评论区。 - Karthik
6个回答

59
将以下内容添加到您的清单文件中:

将以下内容添加到您的清单文件中:

  <activity   android:name=".AppPreferenceActivity" android:label="@string/app_name">  
     <intent-filter> 
       <action android:name="com.scytec.datamobile.vd.gui.android.AppPreferenceActivity" />  
       <category android:name="android.intent.category.DEFAULT" />  
     </intent-filter>   
  </activity>

21

在我的情况下,我确信操作是正确的,但我传递了错误的URL,我传递了网站链接,但忘记在开头加上http://,因此导致了相同的问题,这是我的清单(其中的一部分):

<activity
        android:name=".MyBrowser"
        android:label="MyBrowser Activity" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="com.dsociety.activities.MyBrowser" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:scheme="http" />
        </intent-filter>
    </activity>

当我编写以下代码时,在运行时抛出相同的异常:

Intent intent = new Intent();
intent.setAction("com.dsociety.activities.MyBrowser");
intent.setData(Uri.parse("www.google.com"));    // should be http://www.google.com
startActivity(intent);

17

通常为了避免这种异常,您需要像这样在代码周围加上try和catch

try{

// your intent here

} catch (ActivityNotFoundException e) {
// show message to user 
}

28
我不同意。你应该先检查一下是否有任何活动可以处理这个意图。if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } - Mark Pazon
3
@MarkPazon 这在99%的情况下是有效的,但如果你有一个处理自定义 scheme 的活动,那么如果用户运行的是没有新方案的应用程序旧版本,就可能会遇到崩溃。请注意核实清楚。 - Codeversed

4
if (intent.resolveActivity(getPackageManager()) == null) {
    Utils.showToast(activity, no_app_available_to_complete_this_task);
} else {
    startActivityForResult(intent, 1);
}

你能解释一下为什么这个方法适用于原始问题吗? - mjuarez
1
这是一个示例,用于检查相关意图是否可用。无论您使用的是startActivity()还是startActivityForResult(),resolveActivity都会检查是否存在任何活动/包来处理此意图。 - Amar Singh

1

Intent intent=new Intent(String)是为参数task定义的,而您正在将参数componentname传递到其中,请改用:

Intent i = new Intent(Settings.this, com.scytec.datamobile.vd.gui.android.AppPreferenceActivity.class);
                    startActivity(i);

在这个语句中,将 ActivityName 替换为 Activity 类的名称,在该代码所在的类中。

构造函数 Intent(new Preference.OnPreferenceClickListener(){}, Class<AppPreferenceActivity>) 未定义。 - Ahmad Arslan
使用您的第一个活动名称而不是ActivityName,因为第一个参数应该是Activity的实例。 - jeet

0

如果您处理了在另一个模块中找不到的活动,请确保您已经在您的build.gradle文件中添加了以下行:

implementation project(':YOUR-MODULE-ROOT')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接