Android: ActivityNotFoundException

public void onContacts(View v)
{
    Intent i=new Intent(Intent.ACTION_VIEW, ContactsContract.Contacts.CONTENT_URI);
    startActivity(i);
}

public void onBrowse(View v)
{

    String s1= et1.getText().toString();
    Intent i= new Intent(Intent.ACTION_VIEW, Uri.parse(s1));
    startActivity(i);

}

public void onSearch(View v)
{

    String s1= et2.getText().toString();
    Intent i=new Intent(Intent.ACTION_WEB_SEARCH);
    i.putExtra(SearchManager.QUERY, s1);
    startActivity(i);
}

public void onMap(View v)
{

    String s1= et3.getText().toString();
    Intent i=new Intent(Intent.ACTION_VIEW,Uri.parse("geo:0,0?q="+s1));
    startActivity(i);
}

Это несколько методов, каждый из которых прикреплен к соответствующим кнопкам, при нажатии на любую из этих кнопок отображается ActivityNotFoundException, кроме метода onContacts(), который не привязан ни к какому редактируемому тексту...

результат logcat:

 05-27 23:18:42.984: E/AndroidRuntime(714): Caused by:    android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=google }

AndroidManifest.xml

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

<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
<uses-permission android:name="android.permission.CALL_PHONE"/>   

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".AllIntentActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

see if this can help.. I've run the a programme with same function where no string is retrieved from he edittext,i.e the required resources is provided in the method itshelf

исходный код того, о чем я говорю

public void onContents(View v)
{
    Intent i=new Intent(Intent.ACTION_VIEW,ContactsContract.Contacts.CONTENT_URI);
    startActivity(i);
}

public void onBrowser(View v)
{
    Intent i= new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
    startActivity(i);
}

public void onSearch(View v)
{
    Intent i=new Intent(Intent.ACTION_WEB_SEARCH);

    i.putExtra(SearchManager.QUERY, "tapu");
    startActivity(i);       
}

public void onMap(View v)
{
    Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=hyderabad"));
    startActivity(i);
}

public void onCall(View v)
{
    Intent i=new Intent(Intent.ACTION_CALL,Uri.parse("tel:9776215312"));
    startActivity(i);
}

person ceanan007    schedule 27.05.2013    source источник
comment
Вы уверены, что передаете правильный URI через свой EditText?   -  person eternay    schedule 27.05.2013


Ответы (2)


Я думаю, ваша проблема в том, что нет действия для обработки действий Intent.ACTION_VIEW и Intent.ACTION_WEB_SEARCH, чтобы проверить, есть ли действие для обработки вашего намерения, которое вы могли бы проверить раньше:

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;

если количество действий в списке действий равно 0, это означает, что на данный момент нет действий для обработки вашего намерения, прежде чем пытаться начать действие, вы должны сначала проверить это.

РЕДАКТИРОВАТЬ: поскольку мы знаем, что эти действия являются общими для устройства Android (карты и веб-браузер), в связи с этим вы должны проверить правильность URI, который вы передаете.

person jac1013    schedule 27.05.2013
comment
Хорошо, я протестировал код, который вы предоставили при редактировании, на реальном устройстве Android (вкладка Galaxy), и все сработало, кроме метода «onCall» (это планшет с Wi-Fi), так где вы запускаете свой код, эмулятор или реальное устройство ? Вы уверены, что строка URI является допустимым URI после того, как вы проанализируете их из EditText или из того, что вы их получаете? - person jac1013; 29.05.2013
comment
ну, тогда проблема должна заключаться в том, когда вы обрабатываете данные через свой EditText, проверяете строку с помощью Log.w, прежде чем передавать ее в качестве аргумента объекту Intent, и переходите к своему журналу после запуска кода, там вы будете знать, если URI поврежден или нет. - person jac1013; 30.05.2013

Ваш URI намерения неверен. Или, скорее, содержимое вашего TextView не построено таким образом, чтобы открыть диалоговое окно поиска, которое вы ожидаете. Попробуйте, например, ввести:

google.com/search?q=blah

как ваш текст в вашем TextView

person DigCamara    schedule 27.05.2013