我有一个应用程序,另一个扩展了另一个应用程序的功能。我正在使用startActivityForResult
从主应用程序向另一个发送一个Intent以检查是否存在并返回一个检查值,但我还想让用户可以隐藏图标。发射器。问题是,如果图标被隐藏,Intent认为该应用程序未安装。我该如何解决这个问题?
我如何查看专业应用
的存在if (!ISPRO) {
Log.d("ProApp", "Check for existence of pro app");
Intent pro_app = new Intent("android.intent.action.MAIN");
pro_app.setComponent(ComponentName.unflattenFromString("my.app.pro/my.app.pro.Index"));
pro_app.addCategory("android.intent.category.LAUNCHER");
pro_app.putExtra("my.app.check_code",
"thisIsMyCheckCode");
try {
startActivityForResult(pro_app, 0);
Log.d("ProApp", "startActivityForResult started");
} catch (ActivityNotFoundException e) {
Log.w("ProApp", "WARNING! The pro app doesn't exist");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 0) {
Log.d("ProApp","Pro functions unlocked");
ISPRO = true;
}
}
我如何将支票值发送回主应用
Bundle bundle = this.getIntent().getExtras();
String check_Code = new String("");
if (bundle != null)
check_Code = bundle.getString("my.app.check_code");
if (check_Code.equals("thisIsMyCheckCode")) {
Intent retcode = new Intent();
setResult(RESULT_OK, retcode);
finish();
}
我如何隐藏专业应用的图标
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
提前致谢。
答案 0 :(得分:2)
您正在使用自己的代码导致自己的问题。你有:
Intent pro_app = new Intent("android.intent.action.MAIN");
pro_app.setComponent(ComponentName.unflattenFromString("my.app.pro/my.app.pro.Index"));
pro_app.addCategory("android.intent.category.LAUNCHER");
此代码说“此活动必须在启动器中”。因此,如果该活动不在启动器中,那么当代码崩溃时,您不能抱怨。
使用其他<intent-filter>
和匹配的Intent
来调用此插件。如果插件只应由主应用程序使用而不是由其他应用程序使用,请考虑使用签名级自定义权限。
答案 1 :(得分:1)
为您的应用程序创建一个新的intent-filter,它应该从启动器中隐藏(并删除启动器的intent-filter)。然后在第一个应用程序中创建一个意图来启动创建的intent-filter。
为什么需要单独的应用程序?就我而言,在应用程序中使用第二个活动并使用显式意图运行它会更容易。
答案 2 :(得分:0)
根据CommonsWare
的回复,我在此处展示了示例代码,以清除如何使用不同的<intent-filter>
和匹配的Intent
来调用插件的疑问。
我如何查看专业应用
的存在if (!ISPRO) {
Log.d("ProApp", "Check for existence of pro app");
Intent pro_app = new Intent("android.intent.action.MAIN");
pro_app.setComponent(ComponentName.unflattenFromString("my.app.pro/my.app.pro.Index"));
//change has been made in next line
pro_app.addCategory("android.intent.startUpPro");
pro_app.putExtra("my.app.check_code",
"thisIsMyCheckCode");
try {
startActivityForResult(pro_app, 0);
Log.d("ProApp", "startActivityForResult started");
} catch (ActivityNotFoundException e) {
Log.w("ProApp", "WARNING! The pro app doesn't exist");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 0) {
Log.d("ProApp","Pro functions unlocked");
ISPRO = true;
}
}
我如何隐藏专业应用的图标
//root package declaration
package="my.app.pro"
//activity declaration
<activity
android:name="my.app.pro.Index"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.startUpPro" />
</intent-filter>
</activity>
我希望它会有所帮助!!