intent隐式启动被隐藏图标的activity的方法
今天开发安卓的时候遇到了一个问题,被隐藏掉图标的apk程序,用另一个apk隐式启动的时候,报错。
网上百度了一圈,都说加上category.DEFAULT,但我用了之后发现还是不行。最后终于找到一种,既能隐藏图标,又能隐式启动activity的方法。
首先看一下我之前的代码:
AndroidManifest.xml
<activity
android:name=".MenuActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!--<category android:name="android.intent.category.LAUNCHER" />-->
</intent-filter>
</activity>
LAUNCHER被我注释掉,是因为我要隐藏图标,不让程序显示在列表中。
但隐藏之后,隐式调用就会报错。
网上的大部分方法都是说加上这个代码
<category android:name="android.intent.category.DEFAULT" />
但我试过并不起作用。
后来找到了这种方法:
AndroidManifest.xml
<activity
android:name=".MenuActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--添加data 是为了让图标不显示在launch上-->
<data android:host="test"
android:scheme="com.test.apptest"/>
</intent-filter>
</activity>
不用注释LAUNCHER,同时APP的图标也不会被显示,隐式启动也可以正常使用。
再来看一下第二个APP中的隐式调用方法:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
Uri data = Uri.parse("com.test.apptest://test");
intent.setData(data);
startActivity(intent);
}
});
为什么添加上< data >就不显示图标了,我在网上查到的解释是:
因为app的入口Activity被申明为由接收隐式的Intent来启动,这样就不会显示图标了。
如果需要即显示图标并且也想要响应上述Uri的话,那么我们可以在该Activity中再加入一个intent-filter标签,将data元素移到新建的标签中。
这样应用既可以显示图标又可以响应特定的Uri了。
好了,多谢大家支持!