如何将意图连接到方法

时间:2015-05-28 00:33:12

标签: android android-intent android-manifest

我不知道如何指定一个intent过滤器调用的函数或如何从该intent获取参数(数据)。

例如,在我的AndroidManifest.xml文件中,我有以下内容:

<intent-filter>
     <action android:name="android.intent.action.VIEW"></action>
     <category android:name="android.intent.category.DEFAULT"></category>
     <category android:name="android.intent.category.BROWSABLE"></category>
     <data android:host="example.com" android:scheme="http"></data>
</intent-filter>

用户转到http://example.com/some-end-point - 弹出应用选择器,用户选择我的应用(让我们称之为MyApp)。那么在MyApp中调用什么以及如何获取参数,在这种情况下/some-end-point被调用?

  

如何指定此意图引用的代码块...是否   在Java代码中注册它还是在XML中指定它?

     

对不起基本问题,但我之后无法找到   相当多的搜索和遍历示例代码。

     

也许我对程序化有一个根本错误的假设   这里使用的模型?

1 个答案:

答案 0 :(得分:0)

好吧,这是不明显的。在下面的主onCreate内部,可以访问的全局getIntent()不是由任何东西决定的。

让我们通过展示更大的ActivityMain.xml

来建立更多背景
   <activity android:name=".MainActivity">
        <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"></action>
            <category android:name="android.intent.category.DEFAULT"></category>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <data android:host="example.com" android:scheme="http"></data>
        </intent-filter>
    </activity>

android:name这里是MainActivityMainActivity.java类的主要链接,它通常是默认样板文件的一部分(就像在为你创建的模板化代码中一样)你开始一个新项目。)

在这个课程中,有一个方法onCreate可以在life-cycle rules之后调用(简单来说;当你启动应用程序并且它出现在屏幕上时)。在onCreate内你可以调用类似的内容:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d("FILTERME", "intent - " 
              + getIntent().getAction() + " :: " 
              + getIntent().getDataString());
    }
    ...
}

现在给自己发送一个链接,例如http://example.com/some-end-point

然后在手机上连接USB线和adb运行示例应用程序(我使用android studio),查看电子邮件并单击该链接,您应该会在日志中看到整个URI。

那么你去吧:在一个包罗万象的函数中调用一个单独的隐式全局状态 - 根本不明显(和恕我直言,一个草率的设计)。鉴于此,可能有更好的方法来做到这一点。顺便说一下,我想出了by looking at this code ......它回答了一些其他片段没有做过的问题。