如何使用BroadcastReceiver在Android应用程序(没有Icon)中启动活动?

时间:2014-08-14 11:36:46

标签: android broadcastreceiver

我正在我的设备上运行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启动应用程序的活动是没有用的。

0 个答案:

没有答案