2012-01-24 9 views
15

こんにちは私は電話が触れられていないときにアラームを設定したい。画面に約2分間触れていない場合は、アラーム音が鳴ります。これどうやってするの?誰か助けてくれますか? ありがとうございます。AndroidがAndroidを使用してアイドル状態になっているときにアラームを設定するにはどうすればよいですか?

+3

2分間画面に触れないユーザーを検出する部分はありますか? - それは難しいようです:http://stackoverflow.com/questions/4208730/how-to-detect-user-inactivity-in-android – Nobita

+1

あなたはスクリーンセーバーのように言うことを意味しましたか? – Lucifer

+0

そうではありません。私は、アプリケーションが30秒間アイドル状態になっているときにアラームを設定したいと思っていました。それでおしまい。 – malavika

答えて

5

AlarmServiceを以下のコードに渡します。これにより、デバイスがアイドル状態になっている時間がわかります。

idle.java

Handler hl_timeout = new Handler(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try{ 
     hl_timeout.postDelayed(DoOnTimeOut, 15000); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
} 

// Toast 
Thread DoOnTimeOut = new Thread() { 
    public void run() { 
     try{ 
      Toast.makeText(getApplicationContext(), "System is idle", Toast.LENGTH_LONG).show(); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}; 

@Override 
public void onUserInteraction() 
{ 
    super.onUserInteraction(); 
    //Remove any previous callback 
    try{ 
    hl_timeout.removeCallbacks(DoOnTimeOut); 
    hl_timeout.postDelayed(DoOnTimeOut, 15000); 
    }catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

希望これはあなたを助けます。

3

あなたは、アプリケーション/デバイスが

は、タイマーをリセットし、2分間、再び起動する活動クラスのメソッドonUserInteractionを拡張アイドル状態のときにもサウンドを再生するAlarmServiceを作成することができます。

2

あなたの質問が正しく理解されている場合は、ある時間間隔内にユーザーのやりとりが発生していないときにアラームをトリガーする必要があります。また、主要な要件の1つは、フォアグラウンドで実行されているアクティビティがないことです。したがって、onUserInteractionの場合はあなたのためには機能しません。 この場合、自分のAccessibilityServiceを作成した場合でも、すべてのユーザー操作で更新を受け取ることができます。

サービスを宣言するためにマニフェストにこれを追加します。

<service android:name=".MyAccessibilityService"> 
    <intent-filter> 
     <action android:name="android.accessibilityservice.AccessibilityService" /> 
    </intent-filter> 
</service> 

そして、あなたのサービスの実装は次のようになります。

public class MyAccessibilityService extends AccessibilityService 
{ 

@Override 
public void onServiceConnected() { 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    // we are interested in all types of accessibility events 
    info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; 
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
    // we want to receive events in a certain interval 
    info.notificationTimeout = 100; 
    setServiceInfo(info); 

    Log.e("ALEX", "service connected!"); 
} 
@Override 
public void onAccessibilityEvent(AccessibilityEvent arg0) 
{ 
    Log.e("ALEX", "Event happened!"); 

} 
} 

をいつでもユーザーが、例えば、画面に触れて、あなたは意志get onAccessibilityEvent()を起動すると、アラームを起動するタイマーを再起動できます。

ただし、このアプローチには1つの欠点があります。それを機能させるには、電話設定 - >アクセシビリティに移動してアプリケーションを有効にする必要があります。そうしないと、システムはサービスを開始しません。

関連する問題