2013-11-28 2 views
0

Я делаю FlashLight, и когда друг пытается это сделать, у него случился сбой. Он имеет V 4.0+ Вот мой LogCat:У меня проблемы с Android 4.0+ Но нет в 2.2

https://github.com/Hersix/LogCat-FlashLightAPP/commit/9fa44813cdad14f461c14070cc0eea6e8c29c93a

Я новичок, но я читал, что приложения с потоками в версии 4.0+ Сбои, так .. я не понимаю хорошо, но, как могу ли я поместить весь свой код без потока? Это мое приложение код:

package flash.light.app; 


import com.google.ads.AdRequest; 
import com.google.ads.AdView; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.ActivityNotFoundException; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     exitByBackKey(); 

     //moveTaskToBack(false); 

     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

protected void exitByBackKey() { 

    AlertDialog alertbox = new AlertDialog.Builder(this) 
    .setMessage("Do you want to Exit?") 
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     // do something when the button is clicked 
     public void onClick(DialogInterface arg0, int arg1) { 

      finish(); 
      //close(); 


     } 
    }) 

    .setNeutralButton("Rate us!", new DialogInterface.OnClickListener() { 

     // do something when the button is clicked 
     public void onClick(DialogInterface arg0, int arg1) { 

      { 
       Uri uri = Uri.parse("market://details?id=" + getPackageName()); 
       Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); 
       try { 
        startActivity(goToMarket); 
       } catch (ActivityNotFoundException e) { 
        Toast.makeText(getApplicationContext(), "Couldn´t launch Google Play", 
          Toast.LENGTH_LONG).show(); 
       } 
      } 


     } 
    }) 

    .setNegativeButton("No", new DialogInterface.OnClickListener() { 

     // do something when the button is clicked 
     public void onClick(DialogInterface arg0, int arg1) { 
         } 
    }) 
     .show(); 

} 

ImageButton btnSwitch; 
private Camera camera; 
private boolean isFlashOn; 
private boolean hasFlash; 
Parameters params; 
MediaPlayer mp; 




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

    final AdView adView = (AdView) findViewById(R.id.adView); 
    adView.loadAd(new AdRequest()); 

    ImageView ButtonScr = (ImageView) findViewById(R.id.imageView1); 
    ButtonScr.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      Intent Screen = new Intent (MainActivity.this, ScreenActivity.class); 
      startActivity(Screen); 
     }}); 


    // flash switch button 
    btnSwitch = (ImageButton) findViewById(R.id.imageButton1); 


    // First check if device is supporting flashlight or not   
    hasFlash = getApplicationContext().getPackageManager() 
      .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 

    if (!hasFlash) { 
     // device doesn't support flash 
     // Show alert message and close the application 
     AlertDialog alert = new AlertDialog.Builder(MainActivity.this) 
       .create(); 
     alert.setTitle("Error"); 
     alert.setMessage("Sorry, your device doesn't support flash light!"); 
     alert.setButton(AlertDialog.BUTTON_POSITIVE,"OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 

       Intent Screen = new Intent (MainActivity.this, ScreenActivity.class); 
       startActivity(Screen); 
       Toast.makeText(MainActivity.this, "You can use our Screen Light :)", 
         Toast.LENGTH_LONG).show(); 

       // closing the application 
       // finish(); 
      } 
     }); 


     alert.show(); 
     return; 
    } 

    // get the camera 
    getCamera(); 

    // displaying button image 
    toggleButtonImage(); 

    //Orientación de la APP Vertical 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    //Codigo para que no se apague la pantalla :D 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 


    // Switch button click event to toggle flash on/off 
    btnSwitch.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (isFlashOn) { 
       // turn off flash 
       turnOffFlash(); 
      // RelativeLayout layout = (RelativeLayout)findViewById(R.id.background); 
      // layout.setBackgroundResource(R.drawable.image6); 
      } else { 
       // turn on flash 
       turnOnFlash(); 
       // RelativeLayout layout =(RelativeLayout)findViewById(R.id.background); 
       //layout.setBackgroundResource(R.drawable.slender); 
      } 
     } 
    }); 
} 


// Get the camera 
private void getCamera() { 
    if (camera == null) { 
     try { 
      camera = Camera.open(); 
      params = camera.getParameters(); 
     } catch (RuntimeException e) { 
      Log.e("Camera Error. Failed to Open. Error: ", e.getMessage()); 
     } 
    } 
} 


// Turning On flash 
private void turnOnFlash() { 
    if (!isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 
     // play sound 
    // playSound(); 

     params = camera.getParameters(); 
     params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 
     isFlashOn = true; 

     // changing button/switch image 
     toggleButtonImage(); 
    } 

} 


// Turning Off flash 
private void turnOffFlash() { 
    if (isFlashOn) { 
     if (camera == null || params == null) { 
      return; 
     } 
     // play sound 
     // playSound(); 

     params = camera.getParameters(); 
     params.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(params); 
     camera.stopPreview(); 
     isFlashOn = false; 

     // changing button/switch image 
     toggleButtonImage(); 
    } 
} 


// Playing sound 
// will play button toggle sound on flash on/off 
// private void playSound(){ 
// if(isFlashOn){ 
//  mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_off); 
// }else{ 
    //  mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_on); 
// } 
// mp.setOnCompletionListener(new OnCompletionListener() { 

    //  @Override 
    // public void onCompletion(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
    //  mp.release(); 
    // } 
    // }); 
// mp.start(); 
// } 

/* 
* Toggle switch button images 
* changing image states to on/off 
* */ 
private void toggleButtonImage(){ 
    if(isFlashOn){ 
     btnSwitch.setImageResource(R.drawable.on); 

    }else{ 
     btnSwitch.setImageResource(R.drawable.off); 

    } 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    // on pause turn off the flash 
    turnOffFlash(); 
} 

@Override 
protected void onRestart() { 
    super.onRestart(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    // on resume turn on the flash 
    //CREO QUE ES PARA QUE SE ENCIENDA APENAS SE ABRE. 
    if (hasFlash){ 
     turnOnFlash(); 
} else { 
    Toast.makeText(MainActivity.this, "You can use our Screen Light :)", 
      Toast.LENGTH_LONG).show(); 
    } 

} 
@Override 
protected void onStart() { 
    super.onStart(); 

    // on starting the app get the camera params 
    getCamera(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    // on stop release the camera 
    if (camera != null) { 
     camera.release(); 
     camera = null; 
    } 





} 

} 

Как я могу сделать, чтобы запустить приложение SIMPLE (как это, его простой фонарик) во всех или почти всех устройств? Спасибо и извините за мой английский

+0

Если вы можете опубликовать трассировку стека, это поможет. – mbmc

ответ

0

Заменить

Log.e("Camera Error. Failed to Open. Error: ", e.getMessage()); 

с

Log.e("MainActivity", "Camera Error. Failed to Open. Error: " + e.getMessage()); 

затем выяснить, почему камера не работает.

+0

OMGGGGGGGG, Спасибо, Люблю тебя: $ Действительно спасибо! Благодарю! –

1

вашего вопрос находится в getCamera(), в строке Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());

это выглядит как e.getMessage() возвращается null, поэтому авария.

вы, вероятно, следует использовать формат Log.e(TAG, "getCamera", e);, который будет печатать трассировку стека для исключения (и не врезаться приложение)

+0

WOW, 1 минута, и я получил свой ответ lol Хорошо, я постараюсь, если я не получу ошибок –

+0

Но подождите .. Где я поставил Log.e (TAG, «getCamera», e); ? В первой части: // получить камеру getCamera(); ???? –

+0

вы должны заменить Log.e («Ошибка камеры. Не удалось открыть. Ошибка:», e.getMessage()); с той, которую я предложил. Это потом скажет вам, что вызвало вашу ошибку. – panini

Смежные вопросы