找不到处理Intent的活动

时间:2014-11-12 16:13:46

标签: android

我有一个WebView应用程序,其中包含链接列表(sopcast stream)。此应用程序需要安装SopCast Player。如果没有,该应用程序崩溃。

我收到了这个错误:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=sop://115.175.143.195:3912/151307 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
at android.app.Activity.startActivityForResult(Activity.java:2827)
at android.app.Activity.startActivity(Activity.java:2933)
at com.foxys.tvmax.MainActivity$1.shouldOverrideUrlLoading(MainActivity.java:47)
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:217)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:324)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3740)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:638)
at dalvik.system.NativeStart.main(Native Method)

清单文件:

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

    <uses-permission android:name="android.permission.INTERNET" />

    <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"
            android:configChanges="orientation|screenSize"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

我的MainActivity

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {


    //private Button button;
    private WebView webView;
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Get webview 
        webView = (WebView) findViewById(R.id.webView1);

        startWebView("http://example.com");

    }

    private void startWebView(String url) {

        //Create new webview Client to show progress dialog
        //When opening a url or click on link

        webView.setWebViewClient(new WebViewClient() {      
            ProgressDialog progressDialog;

            //If you will not use this method url links are opeen in new brower not in webview

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if(url.contains("example.com")) {
                  view.loadUrl(url);
                } else {
                  Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                  startActivity(i);
                }
                return true;
              }

            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                webView.loadUrl("file:///android_asset/error.html");

            }

            //Show loader on url load
            public void onLoadResource (WebView view, String url) {
                if (progressDialog == null) {
                    // in standard case YourActivity.this
                    progressDialog = new ProgressDialog(MainActivity.this);
                    progressDialog.setMessage("Loading...");
                    progressDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
            }


        }); 


         // Javascript inabled on webview  
        webView.getSettings().setJavaScriptEnabled(true); 

        // Other webview options
        /*
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(false);
        webView.getSettings().setBuiltInZoomControls(true);
        */


        //Load url in webview
        webView.loadUrl(url);


    }



    // Open previous opened link from history on webview when back button pressed

    @Override

    public void onBackPressed() {
        if(webView.canGoBack()) {
            webView.goBack();
        } else {
            // Let the system handle the back button

            new AlertDialog.Builder(this)
            .setMessage("Are you sure you want to exit?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                     MainActivity.this.finish();
                }
            })
            .setNegativeButton("No", null)
            .show();
        }
    }



}

我该如何解决?

4 个答案:

答案 0 :(得分:0)

确保你有一个Intent导致你的另一个活动你在清单文件中列出了该活动

IE,如果我想要以下代码工作

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

我的清单需要

<activity
    android:name=".SecondActivity"
    android:label="@string/second_activity" >
</activity>

答案 1 :(得分:0)

使用意图后,

Intent intent = new Intent(this, DisplayMessageActivity.class);
startActivity(intent);

将新活动添加到清单:

<application ... >
...
<activity
    android:name="com.example.myfirstapp.DisplayMessageActivity"
    android:label="@string/title_activity_display_message"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myfirstapp.MainActivity" />
</activity>

developer docs
更新从意图开始的网页

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);

或使用选择器:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
Intent chooser = Intent.createChooser(browserIntent, "Open with");
startActivity(chooser);

答案 2 :(得分:0)

您似乎正试图通过logcat将您的应用程序发送到网站。

您可以像这样设置代码:

String url = "http://www.example.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

它说你叫android.intent.action.VIEW,应该是android.intent.action.ACTION_VIEW

答案 3 :(得分:0)

也许你应该改为sendBroadcast:                 意图;                 尝试{                     intent = Intent.parseUri(url,Intent.URI_INTENT_SCHEME);                     intent.addCategory(Intent.CATEGORY_BROWSABLE);                     intent.setComponent(NULL);                     sendBroadcast(意向);                 } catch(URISyntaxException e){                     e.printStackTrace();                     返回false;                 }