2016-08-27 3 views
1

как мне открывать ссылки в моем веб-обозревателе, доступном другим приложениям?Как обмениваться ссылками с моим приложением?

Я попытался это, но он не перечисляет мое приложение anywhere-

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); 

     Log.w("URLHandler", intentUri); 
    //} else { 
     Uri data = getIntent().getData(); 
     if (data == null) { 
      uri.setText(" "); 
     } else { 
      uri.setText(getIntent().getData().toString()); 
     } 
    //} 




// Load URL from Browsable intent filter if there is a valid URL pasted 
    if (uri.length() > 0) 
     webView.loadUrl(url); 
    else 
     // dont load 

манифеста

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

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

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

Не мог бы вы изменить свой вопрос и копировать вставить всю деятельность и AndroidManifest файла? –

ответ

0

Чтобы разрешить другие приложения, чтобы начать деятельность, вам нужно добавьте элемент <intent-filter> в файл манифеста для соответствующего элемента <activity>.

<intent-filter > ... </intent-filter> 

фильтр намерений определяет намерения, которые ваша деятельность «слушает» для запуска.

<action android:name="ndroid.intent.action.SEND" /> 
<category android:name="android.intent.category.DEFAULT"/> 

Действие и категория - это оба поля, которые устанавливаются по намерению до того, как он «запущен» в систему. Затем система будет искать любые действия, которые соответствуют как действию, так и категории, и если он найдет его, то он запустит это действие или, если он найдет несколько, он покажет пользователю все из них и позволит им выбрать.

Когда ваше приложение установлено на устройстве, система идентифицирует ваши фильтры намерений и добавляет информацию во внутренний каталог намерений, поддерживаемых всеми установленными приложениями. Когда приложение вызывает startActivity() или startActivityForResult(), с неявным намерением, система обнаруживает, какая деятельность (или действия) может реагировать на намерение.

Внутри вашей деятельности в следующих

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Get the intent that started this activity 
    Intent intent = getIntent(); 
    Uri data = intent.getData(); 

    // Figure out what to do based on the intent type 
    if (intent.getType().indexOf("image/") != -1) { 
     // Handle intents with image data ... 
    } else if (intent.getType().equals("text/plain")) { 
     // Handle intents with text ... 
    } 
} 

Если вы хотите вернуть результат деятельности, вызвавшей ваши, просто вызовите setResult(), чтобы указать код результата и привести Намерение. Когда ваша операция будет завершена, и пользователь должен вернуться к первоначальному действию, нажмите finish(), чтобы закрыть (и уничтожить) вашу активность. Например:

// Create intent to deliver some kind of result data 
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri")); 
setResult(Activity.RESULT_OK, result); 
finish(); 

Чтобы узнать больше о том, как реализуют нажмите here

+0

Я бы очень рекомендовал, чтобы вы прочитали документацию довольно просто, вы должны уметь интерпретировать хотя бы то, что написано там, если вы хотите узнать больше об андроиде. –

+0

Я отредактировал ответ, чтобы объяснить его более подробно, надеюсь, это поможет. @colechole –

+0

Какой URL-адрес вы говорите? –

0

как я открывать ссылки в моем WebView разделяемых другими приложениями? Я хочу, чтобы мое приложение, чтобы быть здесь, в этом списке

Я попытался это, но он не перечисляет мое приложение anywhere-

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

// Get the intent that started this activity 
Intent intent = getIntent(); 
String link = intent.getDataString(); 

uri.seText(link); 
+0

Вы записали l чернила, что вы получаете по ссылке? –

+0

Да положил это внутри onCreate после setContentVIew (R.layout.main) –

+0

Вы смогли получить ссылку? –

-1

Взятые из хрома AndroidManifest.xml: https://cs.chromium.org/chromium/src/chrome/android/java/AndroidManifest.xml?q=AndroidManife&sq=package:chromium&l=1

<!-- Matches the common case of intents with no MIME type.--> 
<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" /> 
</intent-filter> 

<!-- Same filter as above but with MIME types.--> 
<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:mimeType="text/html"/> 
</intent-filter> 

Тогда из других приложений, это прийти в использовании:

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

и Android отобразит вас в диалоговом окне «Выбрать приложение».

Полный пример для клиентского приложения: В AndroidManifest.XML:

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

    <uses-permission android:name="android.permission.INTERNET" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 

     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity" 
      android:launchMode="singleTask"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </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="https"/> 
       <data android:scheme="http"/> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

В activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.j2ko.myapplication.MainActivity"> 

    <WebView 
     android:id="@+id/webView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </WebView> 
</RelativeLayout> 

В Основной деятельности:

package com.j2ko.myapplication; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.webkit.WebView; 

public class MainActivity extends AppCompatActivity { 
    private WebView mWebView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mWebView = (WebView) findViewById(R.id.webView); 

     final Intent intent = getIntent(); 
     if (intent != null) { 
      handleIntent(intent); 
     } 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     handleIntent(intent); 
    } 

    private void handleIntent(final Intent intent) { 
     if (intent.getAction() == Intent.ACTION_VIEW) { 
      final String url = intent.getDataString(); 
      mWebView.loadUrl(url); 
     } 
    } 
} 
+0

Это уже было сообщено ниже –

+0

@ gaurav4sarma Я не вижу никакой связи между моим ответом и другими. colechole делает ответ ниже, исправить вашу проблему? – j2ko

+0

извините, мой вопрос в том, как я действительно загружаю этот URL/данные/ссылку в свой веб-просмотр, когда он ее получает? после выполнения манифеста gaurav, мое приложение становится включенным в «открытые приложения». однако, я хочу загрузить этот url – colechole

Смежные вопросы