我不知道如何指定一个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中指定它?
对不起基本问题,但我之后无法找到 相当多的搜索和遍历示例代码。
也许我对程序化有一个根本错误的假设 这里使用的模型?
答案 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
这里是MainActivity
内MainActivity.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 ......它回答了一些其他片段没有做过的问题。