一定時間後に画面がアイドル状態になったときにアクティビティを開始する必要があります。私は、Intent.SCREEN_OFFインテントを検索してオーバーライドするカスタムbroadcastReceiverを作成するのが最善の方法を確立しました。
このカスタムbroadcastReceiver内で、アクティビティを開始しています。初めて画面が消えたときに機能しますが、アプリをアンインストールして再インストールするまでは機能しません。
次のエラーが発生します。
android.content.ActivityNotFoundException:明示的なアクティビティクラスが見つかりません{ / }; AndroidManifest.xmlでこのアクティビティを宣言しましたか?
このかなり明白な質問に答えるために、はい。私は持っています。
<activity
android:name="gold.KioskPlayer"
android:configChanges="orientation|keyboardHidden"
android:enabled="true"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
それは別のアクティビティからうまく機能します。さらに、マニフェストが間違っていた場合、終止符は機能しません。
トッドが示唆しているように、「エラーは、アクティビティが何と呼ばれるべきかを見失ったように聞こえます。」これはどのように可能ですか?バグですか?
したがって、broadcastReceiverコードは次のとおりです。
BroadcastReceiver screenoff = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ScreenSaver", "ScreenSaver1 - ScreenOff");
//Log.d("Power Lock Pressed", "Power Button Off Pressed:" + intent.getAction());
if(!setup.screensaverShown || !setup.canSleep)
{
releaseWakeLock();
try {
setup.wl = setup.pm.newWakeLock(
PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"ScreenSaver");
setup.wl.acquire();
Thread.sleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try{
KioskPlayer.setup.screensaver=true;
Log.d("ScreenSaver", "ScreenSaver1 starting...");
Intent i = new Intent(getBaseContext(), KioskPlayer.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(i);
}catch(Exception e)
{
Log.d("ScreenSaver", "ScreenSaver1 " + e.toString());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
BroadcastReceiver screenon = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(setup.canSleep)
{
setup.canSleep=false;
}
}
};
public void releaseWakeLock(){
try {
if ( setup.wl != null && setup.wl.isHeld() )
{
setup.wl.release();
setup.wl = null;
}
}catch(Exception e){}
}
別のアクティビティからアクティビティを正常に呼び出すことができます。このサービスから問題なく呼び出すこともできますが、エラーが発生する前に一度だけ呼び出すことができます。
助けていただければ幸いです!