尝试从Action.PICK_ACTIVITY返回的意图启动活动时的ActivityNotFoundException

时间:2013-06-01 17:34:56

标签: java android

我正在开发一个将“手势”与活动相关联的应用程序(例如Dolphin Browser使用url)。我想要做的是允许用户选择Action.PICK_ACTIVITY:

的活动
    Intent data = new Intent(Intent.ACTION_MAIN);
        data.addCategory(Intent.CATEGORY_LAUNCHER);
        Intent intent = new Intent(Intent.ACTION_PICK_ACTIVITY);
        intent.putExtra(Intent.EXTRA_INTENT, data);
        startActivityForResult(intent, PICK_ACTIVITY);
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_ACTIVITY && resultCode == RESULT_OK) {
        Gesture gesture = new Gesture();
        gesture.intent = data;
        Intent intent = new Intent(this, GestureEditorActivity.class);
                 intent.putExtra("com.example.gesture.Gesture",gesture.toByteArray());
        startActivity(intent);
    }
}

然后,当用户绘制相关手势时,我开始活动:

Intent intent = GestureList.getInstance(getApplicationContext()).getIntentForGesture(gesture);//intent corresponds to data in onActivityResult method
    if(intent != null)
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    else
        Toast.makeText(this, R.string.unrecognized_gesture, Toast.LENGTH_LONG).show();

但是我得到了一个ActivityNotFoundException:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.MAIN dat=#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=com.android.calculator2/.Calculator;end }

这是我的getIntentForGesture方法:

public Intent getIntentForGesture(Gesture gesture)
{

    float bestDist = Float.MAX_VALUE;
    Gesture bestGesture = null;
    for(Gesture g:this)
    {
        float dist = gesture.distance(g);
        if(dist < bestDist)
        {
            bestDist = dist;
            bestGesture = g;
        }
    }

    if(bestGesture != null)
        return bestGesture.intent;
    else
        return null;
}

抱歉我的英语不好,并提前感谢您的答案

2 个答案:

答案 0 :(得分:0)

您必须在意图中添加FLAG_ACTIVITY_NEW_TASK标记

Intent intent = GestureList.getInstance(getApplicationContext()).getIntentForGesture(gesture);//intent corresponds to data in onActivityResult method
if (intent != null) {
    try {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} else {
    Toast.makeText(this, R.string.unrecognized_gesture, Toast.LENGTH_LONG).show();
}

答案 1 :(得分:0)

找不到计算器活动。您的清单文件中可能存在问题,因此您可以尝试:

选项#1:

检查一切都写得很好。错误消息指出:

No Activity found to handle Intent { act=android.intent.action.MAIN dat=#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;component=**com.android.calculator2/.Calculator**;end }

斜杠/可能是错误。

选项#2:

你的情况下的关键是你试图从另一个包(在这个特定的手势,计算器)中打开一个活动,所以你可以尝试检查你是否可以像这样启动计算器应用程序:

Intent calcInt = new Intent(); 
calcInt.setClassName("com.android.calculator2", "com.android.calculator2.Calculator"); 
startActivity(calcInt); 

如果计算器没有使用这个简单的代码启动,那么我敢打赌设备没有安装默认计算器。

选项#3:

发布您的Android Manifest文件,以便我们检查。