【问题标题】:No activity found to handle custom intent未找到处理自定义意图的活动
【发布时间】:2014-03-03 16:41:30
【问题描述】:

使用客户定义的活动,我已经在 manifest.xml 中声明了意图操作 这是带有错误的清单文件

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

    <uses-sdk
        android:minSdkVersion="13"
        android:targetSdkVersion="18" />

    <!--
          TODO - Using a permission element,
          define a custom permission with name
              "course.labs.permissions.DANGEROUS_ACTIVITY_PERM" 
          and "dangerous" protection level.
    -->
    <permission
        android:name="course.labs.permissions.DANGEROUS_ACTIVITY_PERM"
        android:protectionLevel="dangerous"
        >
     </permission>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <!-- TODO - enforce the custom permission on this Activity -->

        <activity
            android:permission="course.labs.permissions.DANGEROUS_ACTIVITY_PERM"
            android:name=".DangerousActivity"
            android:label="@string/app_name" >

            <!--
                 TODO - add additional intent filter info so that this Activity
                  will respond to an Implicit Intent with the action
                  "course.labs.permissions.DANGEROUS_ACTIVITY"
            -->
            <intent-filter >
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="course.labs.permissions.DANGEROUS_ACTIVITY" />
            </intent-filter>


            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这里是在程序中调用意图的地方

代码:

package course.labs.permissionslab;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class GoToDangerousActivity extends Activity {
    private static final String TAG = "Lab-Permissions";
    private static final String DANGEROUS_ACTIVITY_ACTION = "course.labs.permissions.DANGEROUS_ACTIVITY";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.go_to_dangerous_activity);
        Button startDangerousActivityButton = (Button) findViewById(R.id.start_dangerous_activity_button);
        startDangerousActivityButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                startDangerousActivity();
            }
        });
    }

    private void startDangerousActivity() {
        Log.i(TAG, "Entered startDangerousActivity()");
        startActivity(new Intent(DANGEROUS_ACTIVITY_ACTION));
    }
}

请让我知道是否有任何其他信息会出现问题,我已经尝试了我所知道的一切,但不确定为什么我再次收到此错误。

【问题讨论】:

    标签: java android xml eclipse android-intent


    【解决方案1】:

    在使用第二个应用调用之前,您是否安装了具有清单的第一个应用?

    [编辑]

    要检查活动是否注册到某个 Intent,您可以使用 Platform-tools 文件夹中的 adb.exe 列出设备上配置的所有 Intent。

    为此,请在提示符下执行以下命令:

    adb shell dumpsys package > packages.txt
    

    然后打开 packages.txt 并查找操作名称 course.labs.permissions.DANGEROUS_ACTIVITY。应该有一个与该操作相关联的活动。

    【讨论】:

    • 是的,我安装了第一个,它运行良好。第二个错误一直指向“未找到处理意图 course.labs.permissions.DANGEROUS_ACTIVITY 的活动
    • 当它没有使用该操作名称注册活动时会出现此错误消息。这就是为什么我认为它没有安装。
    • 我这样做了,但找不到任何具有该名称的活动,请问我该如何解决?
    • 似乎第一个应用程序没有安装在第二个应用程序的同一设备上。您显示的清单属于第一个应用程序,对吗?
    • 澄清一下,常量 course.labs.permissions.DANGEROUS_ACTIVITY 是动作名称,而不是活动名称。有几个活动可以满足此操作的要求。
    【解决方案2】:

    试试看:

    startActivity(new Intent(getApplicationContext(), DANGEROUS_ACTIVITY_ACTION.class));
    

    这是正常的做法

    [编辑]

    OR(注意 DANGEROUS_ACTIVITY_ACTION 的不同声明)

    private static final String DANGEROUS_ACTIVITY_ACTION = ".DangerousActivity";
    // ...
    startActivity(new Intent(DANGEROUS_ACTIVITY_ACTION));
    

    我在 SplashScreen Activity 中使用它来调用 Main Activity(从 SVG 文件加载完我的图形之后)。

    【讨论】:

    • 谢谢,但没用。我试过了,唯一的选择是 .getclass() 这样做给了我同样的错误。此外 DANGEROUS_ACTIVITY_ACTION 在顶部声明为字符串而不是类
    • 我相信意图将上下文和类作为变量? DANGEROUS_ACTIVITY_ACTION 是一个字符串,使用它作为一个类仍然会给我一个错误
    • 奇怪 - 我在 SplashScreen Activity 中使用第二种方法来调用我的主 Activity。我在所有其他(正常)情况下使用第一种方法(这就是我首先提出它的原因)。
    【解决方案3】:

    您需要在运行“GoToDangerousActivity”之前运行“DangerousApp”。

    【讨论】:

      【解决方案4】:

      这是因为您的危险应用甚至没有安装在设备上。如果您尝试从 android studio 执行此操作,默认情况下 studio 会尝试启动该应用程序,但由于它需要的权限而不会成功。要安装您的危险品,请将工作室的启动设置修改为不立即运行该应用程序。我遇到了同样的问题。

      【讨论】:

        猜你喜欢
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多