2017-01-29 12 views
1

otg cableを検出するためのアプリを作成しました。起動すると「接続されていません」と表示され、何度も何度も繰り返して、otgケーブルを接続すると「接続されていませんそれは "接続されている"と表示される時間!Android Alarm Managerのリピート

私はアプリを起動するときに何も表示すべきではありません。プラグインしたときまたは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メソッドに入れないでください。私はこのメソッドをRunnableに配置し、その当局はstartalarmを呼び出すことにします。あなただけのメッセージを取得

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(); 
} 

この方法では、接続状態が変化した場合:次のコードを作るならばAlarmReceiverクラスではint型

private static int conn_length = 0; 

とonReceive方法で静的を追加します。

編集:

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でToastの代わりにスイッチとディセーブルを有効にする方法を教えてください。 – pavlenis

関連する問題