我正在我的设备上运行Android 4.4并且正在尝试开发一个隐藏的屏幕,只有在从拨号器输入键码时才会触发该屏幕。为此,我将清单文件声明为
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.hiddenscreen">
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".HiddenInfoScreen"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<!--<category android:name="android.intent.category.LAUNCHER" />-->
</intent-filter>
</activity>
<receiver
android:name=".SecretKeyInputReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="0">
<!-- Intent for new outgoing call -->
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
</manifest>
现在在我的接收器中“SecretKeyInputReceiver扩展BroadcastReceiver”我正在读取意图附加信息,评估数字然后显示活动。
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){
// Intercepted out going call. Now check if it matches the apps secret code.
Bundle extras = intent.getExtras();
if(null == extras)
return;
String numDialled = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if(numDialled.equals("00000")){
Intent i = new Intent(Intent.ACTION_MAIN);
i.setClass(context, HiddenInfoScreen.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
setResultData(null);
context.startActivity(i);
}
}
}
现在安装活动后,启动器中没有图标(正如预期的那样),但是从拨号盘拨打“00000”,不显示活动。是的,我尝试设置其他数量的不同长度,但它们不起作用。请帮我解决一下这个。 我也尝试过将图标添加到启动器并使用PackageManager在活动启动后删除图标的方法。
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
但这意味着即使通过密码也无法再启动活动。
您的投入将受到重视。我的目标是在Android 3.1+以上运行应用程序,因此使用BootComplete启动应用程序的活动是没有用的。