以编程方式解锁Android设备并在启动时加载应用程序

时间:2014-01-22 02:55:14

标签: java android eclipse

目标:以编程方式解锁Android设备并在启动时加载应用

API :10& 18

IDE :Eclipse

测试设备:模拟器

我理解这个问题已在stackoverflow和其他地方广泛讨论过。但我无法让这个工作。我的第一个问题

  • 仿真器可以在程序上解锁并在启动时加载应用程序吗?
  • 我还读到,在API 13之后,有一些变化,我不确定我是否考虑到了这些变化

假设答案是肯定的,请在下面找到代码。

AndroidManifest.xml

<manifest 
package="com.example.display">


<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.display.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name="com.example.display.myreceiver"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
</application>

MainActivity.java

package com.example.display;

import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager.LayoutParams;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Unlock
        // http://developer.android.com/reference/android/app/Activity.html#getWindow()
        Window window = getWindow();

        window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
        window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

myreceiver.java

我希望代码的这一部分能够在启动时执行并启动应用程序。

package com.example.display;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class myreceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Intent myIntent = new Intent(context, MainActivity.class);
            myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startService(myIntent);
    }

}

问题:我已将上述代码加载到模拟器并重新启动模拟器。我期待代码应用程序解锁模拟器并加载启动应用程序。它不会发生......

不确定下一步要去哪儿......

大多数代码段都来自stackoverflow。

我引用的一些帖子是

  1. Trying to start a service on boot on Android
  2. How to launch the application upon booting up the device?
  3. Android - Wake Up and Unlock Device
  4. 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您好我在这里以编程方式添加解锁并使用以下代码启动我们的应用程序。您需要在广播接收器中添加解锁代码。 请试试让我。感谢

import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;

public class myreceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

     // Unlock the screen
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
            | PowerManager.ACQUIRE_CAUSES_WAKEUP
            | PowerManager.ON_AFTER_RELEASE, "INFO");
    wl.acquire();

    KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardLock kl = km.newKeyguardLock("name");
    kl.disableKeyguard();

    Intent myIntent = new Intent(context, MainActivity.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startService(myIntent);
}
}