2017-01-29 2 views
1

은 내가 시작 OTG cable.When를 검출하는 응용 프로그램을 만들었습니다 그것은 "연결되지 OTG"표시하고 그것을 여러 번 반복이고 나는 여전히 반복 것 OTG 케이블을 연결하면 일부 후 "OTG 연결되지"와 그것이 "otg connected"를 보여주는 시간 !!!!안드로이드 알람 관리자 반복

내가 아무것도 보여주지해야되는 앱 시작할 때 내가 꽂거나 내가 밖으로 연결하면 OTG는이 같은 메시지를 여러 번 반복해서는 안 cable.And 경우에만 표시해야합니다 !!!! MainActivity.class

public class MainActivity extends AppCompatActivity 
{ 
    private Process suProcess; 
    private PendingIntent pendingIntent; 

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

     getRoot(); 
     startAlarm(); 
    } 

    private void getRoot() 
    { 
     try 
     { 
      suProcess = Runtime.getRuntime().exec("su"); 
     } 
     catch (IOException e) 
     { 

     } 
    } 

    private void startAlarm() 
    { 
     Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); 

     AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     int interval = 1000; 
     manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
    } 
} 

AlarmReceiver.class

public class AlarmReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context,Intent intent) 
    { 
     File directory = new File("/sys/bus/usb/devices"); 
     File[] contents = directory.listFiles(); 

     if(contents.length == 0) 
     { 
      Toast.makeText(context,"otg not connected",Toast.LENGTH_SHORT).show(); 
     } 
     else 
     { 
      Toast.makeText(context,"otg connected",Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

답변

0

당신이 appstart에 알람을 원하지 않는 경우

는에서 onCreate 방법에 넣어하지 않습니다. 나는 regulary에이 startalarm를 부를 것이다,의 Runnable에이 방법을 둘 것입니다. AlarmReceiver 클래스에서 정적 INT

private static int conn_length = 0; 

를 추가하고, onReceive 방법에 다음 코드를 만들 것입니다 경우 :

File directory = new File("/sys/bus/usb/devices"); 
File[] contents = directory.listFiles(); 

if(contents.length == conn_length){ 
    return; 
} 
else{ 
    conn_length = contents.length; 
} 

if(conn_length == 0) 
{ 
    Toast.makeText(context,"otg not connected",Toast.LENGTH_SHORT).show(); 
} 
else 
{ 
    Toast.makeText(context,"otg connected",Toast.LENGTH_SHORT).show(); 
} 

이 방법의 유일한 메시지를받을 경우 연결 상태 변경.

편집 :

Runnable implentation의 예.

가에서 onCreate 방법에 추가이
Handler handler = new Handler(); 
handler.post(alarmUpdater); 

및 클래스의 다른 부분에서

:

public Runnable alarmUpdater= new Runnable() { 
    @Override 
    public void run() { 
     startalarm(); 
    } 
}; 
+0

의 Runnable 무엇입니까? – pavlenis

+0

방법의 Runnable 내부 방법을 넣어? – pavlenis

+1

그것은 작동합니다! 대단히 감사합니다 !!! 그냥 스위치를 활성화하고 AlarmReceiver.class에 토스트 대신 사용하지 않도록 설정하는 방법을 말해 줄래! – pavlenis