2015-02-11 58 views
0

我在我的瀏覽器應用程序中實現了「< category android:name =」android.intent.category.BROWSABLE「/>」 我想要任何其他瀏覽器顯示列表以選擇要處理的應用程序該鏈接,其工作正常,我能夠從列表中啓動我的應用程序,但是它不會在我的應用程序中加載該網址,它所做的只是打開我的應用程序並將該網址粘貼到文本字段中。任何線索?從可瀏覽的意圖加載網址android

編輯:我試圖將其粘貼,但應用程序生效後在我的WebView這一個裝載URL關閉

TextView uri = (TextView) findViewById(R.id.urlField); 
    //if (Intent.ACTION_MAIN.equals(getIntent().getAction())) { 
     String intentUri = (new Intent("com.example.browsableintent.MY_ACTION")) 
       .toUri(Intent.URI_INTENT_SCHEME).toString(); 
     uri.setText(intentUri); 
     webView.loadUrl(intentUri); 
     Log.w("URLHandler", intentUri); 
    //} else { 
     Uri data = getIntent().getData(); 
     if (data == null) { 
      uri.setText(""); 
     } else { 
      uri.setText(getIntent().getData().toString()); 
     } 
    //} 

清單

  <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <category android:name="android.intent.category.APP_BROWSER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

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

      <data android:scheme="http" /> 
      <data android:scheme="https" /> 
      <data android:scheme="about" /> 
      <data android:scheme="javascript" /> 
     </intent-filter> 

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

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

      <data android:scheme="http" /> 
      <data android:scheme="https" /> 
      <data android:scheme="inline" /> 
      <data android:mimeType="text/html" /> 
      <data android:mimeType="text/plain" /> 
      <data android:mimeType="application/xhtml+xml" /> 
      <data android:mimeType="application/vnd.wap.xhtml+xml" /> 
     </intent-filter> 
     <!-- For viewing saved web archives. --> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

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

      <data android:scheme="http" /> 
      <data android:scheme="https" /> 
      <data android:scheme="file" /> 
      <data android:mimeType="application/x-webarchive-xml" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.WEB_SEARCH" /> 

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

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

LOG

02-11 17:50:48.678: E/AndroidRuntime(29023): FATAL EXCEPTION: main 
02-11 17:50:48.678: E/AndroidRuntime(29023): Process: com.air.swiftmp, PID: 29023 
02-11 17:50:48.678: E/AndroidRuntime(29023): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.air.swiftmp/com.air.swiftmp.MainActivity}: java.lang.NullPointerException 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.ActivityThread.access$800(ActivityThread.java:163) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.os.Handler.dispatchMessage(Handler.java:102) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.os.Looper.loop(Looper.java:157) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.ActivityThread.main(ActivityThread.java:5335) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at java.lang.reflect.Method.invokeNative(Native Method) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at java.lang.reflect.Method.invoke(Method.java:515) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at dalvik.system.NativeStart.main(Native Method) 
02-11 17:50:48.678: E/AndroidRuntime(29023): Caused by: java.lang.NullPointerException 
02-11 17:50:48.678: E/AndroidRuntime(29023): at com.air.swiftmp.MainActivity.onCreate(MainActivity.java:95) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.Activity.performCreate(Activity.java:5389) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
02-11 17:50:48.678: E/AndroidRuntime(29023): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256) 

回答

1

我會直接切入正題,如果

all it does is open my app and paste the url in the text field.

這將意味着,

if (Intent.ACTION_MAIN.equals(getIntent().getAction())) { 

返回true

我會假設你瀏覽的意圖也是應用程序的主要意圖。

所以你'如果'做的是檢查你的'意圖'(這也是你的可瀏覽)是'主要意圖',這是真的。

編輯:

好了,基本上你檢查,如果你的正在打開瀏覽的屏幕是當它是雙頭呆您的應用程序應該顯示在屏幕上。

在你的Android清單你必須像

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

這是您瀏覽的意圖。當您調用getIntent()。getAction()時,它將返回與Intent.MAIN_ACTION相同的值。那是因爲你在清單中定義了它。這沒什麼錯。

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

其次,您希望加載應用在屏幕打開時獲取的URL。 我對此沒有任何經驗,但我強烈建議查看this鏈接,因爲它似乎解釋了使用webViews加載應用程序中的URL。

我希望這能爲您提供足夠的答案並解決一些困惑!

EDIT2:

我要猜你havnt,無論是初始的網頁視圖,或havnt設定的內容查看關於web視圖

所以嘗試更換您的

setContentView(<Arbitary Thing refering to most likely a layout>); 

WebView webview = new WebView(this); 
setContentView(webview); 

由於喲日子會把你可以指的另一個佈局,則無法加載XML你的TextView,所以我建議刪除

TextView uri = (TextView) findViewById(R.id.urlField); 
uri.setText(intentUri); 

和其他地方,你可能指的URI。

我還建議閱讀this鏈接中提供的示例,因爲它看起來是一個很好的開始。除此之外,只要嘗試和谷歌的WebView教程。

然後看着你的日誌,在95行。你的MainActivity的東西返回null。如果我的建議不起作用,你能告訴我什麼是95線嗎?

EDIT3:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WebView webview = new WebView(this); 
     setContentView(webview); 

     webView.loadUrl("http://www.google.com"); 

    } 
} 

而且它添加到您的Android清單只是標籤下方

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

/**************** ************************************************** ****/

既然你是新來的android讓我解釋最有可能導致你的錯誤:

當你

setContentView(R.id.layout_name); 

R.id提出將查找layout_name.xml這是由你的setContentView設置的任何引用。所以,如果你有layout_name_2.xml與假設R.id.urlField_2並嘗試做

TextView uri = (TextView) findViewById(R.id.urlField2); 

它將找不到R.id.urlField2,因爲它不是在你的LAYOUT_NAME定義。該活動只會在setContentView()中指定的佈局中查找。有多種方法可以合併佈局,因此您可以在1個活動中使用多個xml,但這是另一天的主題。

+0

嘗試編輯您的問題,並顯示您當前的代碼和崩潰的錯誤日誌。如果我不知道我在找什麼,這很難幫助你! – 2015-02-11 12:03:11

+0

第95行是「Log.w(」URLHandler「,intentUri);」我有webviews的經驗,我的webview很好 – 2015-02-11 12:54:10

+0

我想要的是每當用戶在谷歌上查找視頻時,因爲您知道他/她可能會在搜索結果中看到YouTube視頻,所以當他們點擊該鏈接時,它應該詢問他們想要什麼鏈接打開(**這是工作正常**),我也能夠啓動我的應用程序,並讓它粘貼到我的應用程序的地址欄中的網址。**但是**我希望它在將它粘貼到那裏後立即加載該URL。 – 2015-02-11 13:12:21