Emi*_*Adz 3 java android themes
我有以下配置,我有一个应用程序是Main app,另一个应用程序被视为第一个应用程序的主题。如果没有第一个应用程序,第二个应用程序就无法运行。
现在,我必须处理两种情况:
用户安装第二个应用程序,而他已经拥有第一个主应用程序。
用户安装了第二个应用程序,但他没有第一个主应用程序。
在第一种情况下,当用户运行第二个应用程序(主题)时,我想将他重定向到第一个应用程序(主应用程序),因为它已经安装了。在这种情况下,我想从堆栈中删除第二个应用程序(主题)的活动。这样,如果用户按回键,他就会返回到 Android 桌面,而不是第二个(主题)应用程序。在这种情况下,用户不应该意识到中间有一个活动。
在第二种情况下,我想运行第二个应用程序(主题)的活动。此活动有一个按钮,可重定向用户转到 google play 并安装第一个应用程序 (main)。在这种情况下,如果用户决定按后退按钮,他将从 google play 返回到第二个应用程序(主题)的活动,因此在这种情况下,我希望用户看到此活动,它应该位于堆栈中与第一种情况相反。
这是我当前的活动代码:
public class MainActivity extends Activity {
private Context mContext;
private RelativeLayout rlShareAndWin;
private TextView tvInPrizeTitle, tvPrizeDesc;
private boolean isCorrespondingKiboAppInstalled;
private String kiboAppPackageName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initControllers();
initControllerListeners();
}
@Override
protected void onResume() {
super.onResume();
String themePackageName = getPackageName();
kiboAppPackageName = themePackageName.substring(0, ( themePackageName.indexOf(getResources().getString(R.string.theme_away_suffix_string))));
boolean isCorrespondingKiboAppInstalled = isKiboAppInstalledOrNot(kiboAppPackageName);
if (isCorrespondingKiboAppInstalled) {
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(kiboAppPackageName);
//launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(launchIntent);
}
}
private void initControllers() {
mContext = this;
Typeface typeface = Typeface.createFromAsset(getAssets(), "Helvetica LT 97 Black Condensed Oblique_0.ttf");
setContentView(R.layout.layout_activity_main);
rlShareAndWin = (RelativeLayout) findViewById(R.id.rlShareAndWin);
tvInPrizeTitle = (TextView) findViewById(R.id.tvInPrizeTitle);
tvPrizeDesc = (TextView) findViewById(R.id.tvPrizeDesc);
tvInPrizeTitle.setTypeface(typeface);
tvPrizeDesc.setTypeface(typeface);
}
private void initControllerListeners() {
rlShareAndWin.setOnClickListener(OnClickShareAndWin);
}
private View.OnClickListener OnClickShareAndWin = new View.OnClickListener() {
@Override
public void onClick(View v) {
goToPlayStoreToInstallKiboApp(kiboAppPackageName);
}
};
private void goToPlayStoreToInstallKiboApp(String aKiboAppPackageName) {
launchGooglePlayWithPackage(mContext, aKiboAppPackageName);
}
public void launchGooglePlayWithPackage(Context aContext, String packageName) {
try {
aContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
} catch (android.content.ActivityNotFoundException anfe) {
aContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + packageName)));
}
}
private boolean isKiboAppInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean appInstalled = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
appInstalled = true;
}
catch (PackageManager.NameNotFoundException e) {
appInstalled = false;
}
return appInstalled ;
}
}
Run Code Online (Sandbox Code Playgroud)
你可以看到我尝试设置:
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
,
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Run Code Online (Sandbox Code Playgroud)
目的是在安装主应用程序后启动它。但这些都不能帮助我实现我想要的目标。
finish()
执行后调用startActivity()
以从堆栈中删除先前的活动。
就像这样:
if (isCorrespondingKiboAppInstalled) {
Intent launchIntent = getPackageManager().getLaunchIntentForPackage(kiboAppPackageName);
startActivity(launchIntent);
finish();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1315 次 |
最近记录: |