App唤醒其他App传参问题
基本使用方法
1.urlschema 隐式
调用方:
webview.loadUrl("lf-open://open/lf?username=121&pwd=456");
被唤醒方:
Uri uri = getIntent().getData();
if (uri != null) {
String username = uri.getQueryParameter("username");
String pwd = uri.getQueryParameter("pwd");
Log.d("lf", username + "," + pwd);
}
<activity
android:name=".SettingActivity"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat">
<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:host="open"
android:pathPrefix="/lf"
android:scheme="lf-open" />
</intent-filter>
</activity>
2.intent 显示
调用方
String packageName = "com.example.liutest";
String className = "com.example.liutest.SettingActivity";
String data="123";
Intent intent=null;
if(true){
if(true){
intent=new Intent(Intent.ACTION_MAIN);
// intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn=new ComponentName(packageName,className);
intent.setComponent(cn);
} intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
}
intent.putExtra("data",data);
startActivity(intent);
被唤醒方:
Intent intent = getIntent();
String data = intent.getStringExtra("data");
Log.d("lf", data);
存在的问题:
urlschema 第一次能正常唤醒并获取参数,第二次可以唤醒,但参数取不到,即没有触发oncreate事件。
唤醒的一定是app loading页面,并且 启动模式设置为 android:launchMode="singleTask"
intent 方式 拿不到参数,是因为多了这句 intent.addCategory(Intent.CATEGORY_LAUNCHER);
整体思路是 App A 唤醒 App B的同时要实现登录功能,故需要传递用户的一些参数。这样相当于每次都是新建了一个App B(唤醒的是B的loading页面),利用
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
来判定是否是第一次打开。如果是第一次打开,执行初始化逻辑,否则直接return。参数的获取要写在这几句的前面。