Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Είμαι σχετικά νέος στον προγραμματισμό σε android, και στον προγραμματισμό εφαρμογών επίσης.

Έχω βέβαια διαβάσει κάποια βιβλία java, και επίσης παρακολουθήσει αρκετά tutorials σε java και κυρίως σε android. Εδώ και λίγο καιρό ξεκίνησα την ανάπτυξη μιας εφαρμογής επιλογών εκκίνησης/απενεργοποίησης της συσκευής, η οποία ενσωματώνει και λειτουργίες εναλλαγής λειτουργίας πτήσης, ήχου/δόνησης και ρύθμισης φωτεινότητας.

Ενώ οι σχετικές λειτουργίες με την επανεκκίνηση/απενεργοποίηση λειτουργούν όπως αναμένεται, δεν έχω καταφέρει να κάνω πλήρως λειτουργικές την εναλλαγή λειτουργίας πτήσης και τη ρύθμιση της φωτεινότητας.

 

Όσον αφορά λοιπόν τη λειτουργία πτήσης, έχω ένα toggle button, το οποίο εκτελεί αυτή τη λειτουργία. Το πρόβλημα είναι ότι αρχίζει να λειτουργεί μετά από 2-3 πατήματα, και όχι σταθερά. Δηλαδή αλλάζει πχ σε λειτουργία πτήσης(αν μπω στις ρυθμίσεις είναι και εκεί τσεκαρισμένη η λειτουργία πτήσης), αλλά τις περισσότερες φορές δεν μπαίνει πραγματικά σε λειτουργία πτήσης(κάποιες μπαίνει αλλά φαινεται να γίνεται τυχαία), δηλαδή το τηλέφωνο συνεχίζει να λειτουργεί και να δέχεται κλήσεις.

 

Ο σχετικός κώδικας είναι:

>
case R.id.tglAirplane:

 context = getApplicationContext();
    if (((ToggleButton)v).isChecked()){
	    boolean isEnabled = android.provider.Settings.System.getInt(getContentResolver(),
			    android.provider.Settings.System.AIRPLANE_MODE_ON, 0) == 1;
	   
	    if(isEnabled == false){
	    android.provider.Settings.System.putInt(context.getContentResolver(),
			    android.provider.Settings.System.AIRPLANE_MODE_ON, 1);
	    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
	    intent.putExtra("state", 1);
	    sendBroadcast(intent);
	    }
    }
    else{
	 android.provider.Settings.System.putInt(context.getContentResolver(),
	   android.provider.Settings.System.AIRPLANE_MODE_ON, 0);
		    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
		    intent.putExtra("state", 0);
		    context.sendBroadcast(intent);
	   
    }
   
 break;
@Override
   public void onpause() {
    super.onpause();
    bundle2.putBoolean("ToggleAirplaneState", tgbAirplane.isChecked());
    bundle.putBoolean("ToggleSoundState", tgbSound.isChecked());
   }
   @Override
   public void onresume() {
    super.onresume();
    tgbAirplane.setChecked(bundle2.getBoolean("ToggleAirplaneState",true));
    tgbSound.setChecked(bundle.getBoolean("ToggleSoundState", true));

 

Όσον αφορά τώρα τη λειτουργία ρύθμισης του φωτισμού της οθόνης, το πρόβλημα είναι ότι αυτός αλλάζει όσο είναι ενεργή η οθόνη με τη seekbar. Μόλις τελειώσει η συγκεκριμένη activity η φωτεινότητα επιστρέφει στην κατάσταση που ήταν πριν. Δεν διατηρούνται οι αλλαγές δηλαδή.

 

Εδώ ο σχετικός κώδικας:

>
public class BrightnessActivity extends Activity implements OnCheckedChangeListener{
public static final NumberFormat formatter = new DecimalFormat("###");
CheckBox autobrightness;
private static Bundle bundle = new Bundle();

@Override
protected void onCreate(Bundle savedInstanceState) {
 // TODO Auto-generated method stub
 super.onCreate(savedInstanceState);
 setContentView(R.layout.brightness_activity);
 SeekBar BackLightControl = (SeekBar)findViewById(R.id.backlightcontrol);
 autobrightness = (CheckBox) findViewById(R.id.chAutobrightnes);
 autobrightness.setOnCheckedChangeListener(this);
 final TextView BackLightSetting = (TextView)findViewById(R.id.backlightsetting);

 BackLightControl.setonseekBarChangeListener(new SeekBar.onseekBarChangeListener() {
 
  public void onprogressChanged(SeekBar seekBar, int progress,
 boolean fromUser) {
   // TODO Auto-generated method stub
   float BackLightValue = (float)progress/100.0f;
   if(BackLightValue == 0){
    BackLightValue++;
 }
   int brightnessMode;
   try {
 brightnessMode = Settings.System.getInt(getContentResolver(),
   Settings.System.SCREEN_BRIGHTNESS_MODE);
 /*android.provider.Settings.System.putInt(getContentResolver(),
   android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness)*/;
   if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
    Settings.System.putInt(getContentResolver(),
	  Settings.System.SCREEN_BRIGHTNESS_MODE,
	  Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
   }
  BackLightSetting.setText(formatter.format(100.0D * BackLightValue) + "%");
  final WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
  layoutParams.screenBrightness = BackLightValue;
  getWindow().setAttributes(layoutParams);
   } catch (SettingNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
   }
  }
  public void onstopTrackingTouch(SeekBar seekBar) {
   // TODO Auto-generated method stub
  
  }
 
  public void onstartTrackingTouch(SeekBar seekBar) {
   // TODO Auto-generated method stub
  
  }
 });

}

 

Καμιά ιδέα?

Έχοντας υπόψην σας ότι βρίσκομαι σε αρχικό στάδιο και υπάρχει μια μερική συχνά κατανόηση των διαφόρων λειτουργίων, μεθόδων κλπ(και σίγουρα η Αγγλική γλώσσα δυσκολεύει δε διευκολύνει την κατάσταση).

Δημοσ.

 

Λοιπον επειδη εισαι αρχαριος θα σου δωσω θα "γενικη κατευθυσνη" ωστε να ψαξεις και να μαθεις οχι μονο αυτο που ζητας, αλλα και αρκετα που σχετιζοντε με αυτο.

 

 

Για το flying mode ψαξε στον κωδικα του android platform και δες πως υλοποιησαν οι developers το αντιστοιχο widget.

Για τη φωτηνωτητα ισως πρεπει να κανεις ενα Service ή μια "αορατη" Activity

Δημοσ.

Η αλήθεια είναι ότι έχω ψάξει αρκετά και για τα δύο προβλήματα που αναφέρω στο νετ, έχω δει όλα τα σχετικά θέματα στο stackoveroflow και δοκιμάσει τις λύσεις που προτείνονται, χωρίς επιτυχία(πιθανότατα βέβαια κάπου να κάνω λάθος). Ειδικότερα έχω ήδη ελέγξει το θέμα απο το link που αναφέρεις, το οποίο νομίζω ότι δε λειτουργεί, μιας και στα τελευταία σχόλια αναφέρεται το παρακάτω:

 

Also, I just realized that this controls the brightness of only the current activity. Once it's closed, the brightness resets to the default system setting. So we're back to the original question -- how can I ge the brightness system setting to get applied?

 

Για τη flyning mode που ακριβώς βρίσκεται ο κώδικας που αναφέρεις?

Είναι στο android-sdk, και αν ναι ποια είναι ακριβώς η διαδρομή και το αρχείο? Γιατί έψαξα, αλλά δεν κατάφερα να το βρω.

Δημοσ.

Κάνουμε ένα κόπο να διαβάσουμε τι γράφει ο άλλος πριν απαντήσουμε...

Στον κώδικα που παρέθεσα χρησιμοποιούνται ήδη τα AIRPLANE_MODE και putInt

που αναφέρεις. Επίσης ο σύνδεσμος στο android developers που παραθέτεις, πολύ επιγραμματικά λέει ότι το ανωτέρω String αναφέρεται στο αν η AIRPLANE_MODE είναι ενεργή ή όχι.

Το πρόβλημα είναι ότι πιθανότατα δεν τα έχω χρησιμοποιήσει σωστά ή παραλήψει κάτι, και γι' αυτό παρουσιάζεται η συμπεριφορά που αναφέρω. Χρειάζομαι λοιπόν λίγο περισσότερη βοήθεια από αυτή που προσφέρει η επιγραμματική παρουσίαση του android developers, ή η φράση " με put int τα αλλάζεις".

 

Τέλος, το WRITE_SETTINGS έχει ήδη μπει στα permissions,

όπως και τα "READ_PHONE_STATE", "MODIFY_PHONE_STATE" και "CHANGE_CONFIGURATION"

αλλά παρέλειψα να το αναφέρω.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...