Android将活动带到了前面

时间:2011-04-18 21:09:45

标签: java android

我们要求始终将我们的应用程序放在首位。实际上,我们需要为设备创建信息亭模式。这些设备将提供给用户,因此他们只在设备上使用我们的应用程序。

我们已经对捕获所有可能的关键事件进行了一些研究,例如用户按下Home和Search,但这种方法似乎很难。

我们决定尝试使用我们的应用程序创建一个服务,该应用程序将监视最顶层的进程,以及我们的应用程序是否将我们的应用程序返回到顶部。我们坚持将我们的应用程序放在首位。尝试使用StartActivity()时,没有任何反应。我们认为可以像家庭发射器调用我们的活动一样进行此操作。

我们已审核了与此相关的所有帖子,但尚未找到合适的解决方案。如果有更好的方法,请告诉我!

很多,非常感谢。

2 个答案:

答案 0 :(得分:2)

  

这些设备将提供给用户,因此他们只在设备上使用我们的应用程序。

完全有效的唯一方法是自己制造设备。

  

我们决定尝试使用我们的应用程序创建一个服务,该应用程序将监视最顶层的进程,以及我们的应用程序是否将我们的应用程序返回到顶部。我们坚持将我们的应用程序放在首位。尝试使用StartActivity()时,没有任何反应。我们认为可以像家庭发射器调用我们的活动一样进行此操作。

为什么不将应用程序作为主屏幕?这样,任何按HOME的人都会去你的申请。

当然,用户可以将这些设备重新启动到“安全模式”并删除您的应用程序,除非您自己制造设备并且可以将您的设备作为固件的主屏幕。

答案 1 :(得分:1)

我正在开发一个必须无法使用的应用程序。这是因为这个应用程序被交通管理员使用,而不是每天打电话,我们必须确保他们不会退出我们的应用程序并在互联网上冲浪而不是工作。

所以你必须把它放到你的主要节日中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.droid"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" /> 

    <application 
        persistent="true"
        android:icon="@drawable/icon" 
        android:label="@string/app_name" 
        android:debuggable="true">
        <activity android:name=".YourActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:imeOptions="actionSend|flagNoEnterAction"
                  android:configChanges="keyboardHidden|orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.HOME"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <receiver android:name="BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver> 
    </application>
</manifest> 

您必须在应用中添加启动接收器类:

(BootReceiver.java)

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent arg1) {
        Intent startupIntent = new Intent(context, YourActivity.class);
        startupIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(startupIntent);
    }

}

在此之后,您必须禁用活动中的所有按钮:

/**
 * This method disables all buttons.   
 */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    return true;
}

/**
 * This method disables all buttons.
 */
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    return true;
}

现在你拥有一个无法退出的应用程序的基础(即使用户按下主页按钮),如果他重新启动手机,你的应用程序会在启动完成后立即运行。现在他只能擦除你的应用程序,如果他有adb(并且你打开了usb调试),或者如果他硬重置手机。

如果不清楚或者我在下面的代码中遗漏了一些错误,请随时提问。顺便说一句,你必须用你自己的代码替换.- s。

编辑:更正了xml。