我需要在特定時間後屏幕閒置時啓動活動。我建立了最好的方法是創建一個自定義的broadcastReceiver,它查找Intent.SCREEN_OFF意圖並覆蓋它。從後臺服務啓動Android活動
在這個自定義的broadcastReceiver裏面,我開始了Activity。它在屏幕第一次熄滅時起作用,但在應用程序卸載並重新安裝之前它不會再運行。
,我發現了以下錯誤:
android.content.ActivityNotFoundException: Unable to find explicit activity class {/}; have you declared this activity in your 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>
它工作從另一個活動罰款。而且,如果Manifest錯誤,那麼它就不會完全停止。
正如Todd所說,「錯誤使得它聽起來像是不知何故失去了應該調用Activity的軌道。」這怎麼可能?這是一個錯誤嗎?
所以,這裏的廣播接收器代碼:
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){}
}
我可以從另一個調用活動精細活動。我甚至可以從這個服務中調用它,但是隻有在它發生錯誤之前一次。
幫助將不勝感激!
你確定你在你的Manifest.xml中聲明瞭Activity? – DroidBender
超出。我從另一個Activity中調用了Activity,它工作正常。第一次屏幕熄滅時,它也可以正常工作。之後,它只是給出了錯誤。 – Nico
這個錯誤使得它聽起來像是以某種方式失去了應該被調用的Activity的蹤跡。即使我不懷疑你在清單中聲明瞭它,也許在發佈時也會有一些價值,以防萬一它是一些相關的錯誤。 –