2015-05-26 3 views
0

Я начинающий разработчик Android. Для начала я решил разработать приложение для фонарика в качестве своего первого приложения. Но когда я запускаю его на своей Galaxy S5, у которой действительно есть вспышка, она закрывается, но на моей Галактике Y, на которой на самом деле нет вспышки, она открывается, и кнопка работает тоже. Даже он показывает изменения в журнале! Пожалуйста помоги. Вот мой код включения/выключения факела.Flashlight App сбой каждый раз

private boolean isFlashOn = false; 
private Camera camera; 
private Button button; 

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

    button = (Button) findViewById(R.id.buttonFlashlight); 
    Context context = this; 
    PackageManager pm = context.getPackageManager(); 

    camera = Camera.open(); 
    final Camera.Parameters p = camera.getParameters(); 

    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      if (isFlashOn) { 
       Log.i("info", "torch is turned off!"); 
       p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
       camera.setParameters(p); 
       isFlashOn = false; 
       button.setText("Torch-ON"); 
      } else { 
       Log.i("info", "torch is turned on!"); 
       p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(p); 
       isFlashOn = true; 
       button.setText("Torch-OFF"); 
      } 
     } 
    }); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (camera != null) { 
     camera.release(); 
    } 
} 

Адрес: logcat.

05-27 10:37:20.621 30404-30404/com.example.administrator.flashlight E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.administrator.flashlight, PID: 30404 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.administrator.flashlight/com.example.administrator.flashlight.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
     at android.app.ActivityThread.access$900(ActivityThread.java:172) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:5832) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
     at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:151) 
     at android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:138) 
     at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123) 
     at com.example.administrator.flashlight.MainActivity.onCreate(MainActivity.java:30) 
     at android.app.Activity.performCreate(Activity.java:6221) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
            at android.app.ActivityThread.access$900(ActivityThread.java:172) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:145) 
            at android.app.ActivityThread.main(ActivityThread.java:5832) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 

Любая помощь будет оценена :).

+1

Проводка stacktrace поможет немного. – Smashing

+0

@smashing от того, где можно открыть стек в студии android? –

+0

Если приложение выйдет из строя, Logcat даст причину, по которой он разбился, то есть Stacktrace – Smashing

ответ

1

Что-то в этом роде, сначала используйте переключатель, чтобы включить, затем сделайте условие поворотным. Перепроверьте свое состояние (isFlashOn), что вы делаете эту часть.

p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
camera.setParameters(p); 
isFlashOn = true; 
button.setText("Torch-OFF"); 
+0

Спасибо? Зачем?? –

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