Java Android应用程序只在第一次发布时崩溃,但在第二次发布时可以正常工作
我的Android手电筒应用程序有问题。当我试图在应用程序打开时按下设备的home(主页)按钮,然后继续运行时(通过单击主屏幕上的应用程序图标而不是最近的应用程序按钮),应用程序崩溃。在我从“最近使用的应用”列表中终止应用程序,然后再次打开后,使用上述相同的说明,它不再崩溃 请参阅下面的代码Java Android应用程序只在第一次发布时崩溃,但在第二次发布时可以正常工作,java,android,Java,Android,我的Android手电筒应用程序有问题。当我试图在应用程序打开时按下设备的home(主页)按钮,然后继续运行时(通过单击主屏幕上的应用程序图标而不是最近的应用程序按钮),应用程序崩溃。在我从“最近使用的应用”列表中终止应用程序,然后再次打开后,使用上述相同的说明,它不再崩溃 请参阅下面的代码 public class MainActivity extends Settings { public Camera camera; public Camera.Parameters parameters
public class MainActivity extends Settings {
public Camera camera;
public Camera.Parameters parameters;
public ImageButton flashLightButton;
boolean isFlashLightOn = false;
MediaPlayer mySound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
flashLightButton = (ImageButton)findViewById(R.id.flashlight_button);
flashLightButton.setOnClickListener(new FlashOnOffListener());
registerReceiver(mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
mySound = MediaPlayer.create(this, R.raw.balloon_snap);
if (isFlashSupported()) {
camera = Camera.open();
parameters = camera.getParameters();
} else {
showNoFlashAlert();
}
Settings.active = false;
//super.onCreate(savedInstanceState);
//Set layout we created
//setContentView(R.layout.activity_main);
//Register the receiver which triggers event
//when battery charge is changed
}
public void settings(View view)
{
Intent intent = new Intent(MainActivity.this, Settings.class);
startActivity(intent);
this.finish();
}
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
@Override
//When Event is published, onReceive method is called
public void onReceive(Context c, Intent i) {
//Get Battery %
int level = i.getIntExtra("level", 0);
//Find the progressbar creating in main.xml
ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar);
//Set progress level with battery % value
pb.setProgress(level);
//Find textview control created in main.xml
TextView tv = (TextView) findViewById(R.id.textfield);
//Set TextView with text
tv.setText("" + Integer.toString(level) + "");
}
};
public class FlashOnOffListener implements View.OnClickListener{
SharedPreferences sharedPrefs = getSharedPreferences("VibrateSettings", MODE_PRIVATE);
Boolean vibration = sharedPrefs.getBoolean("VibrateSet", false);
SharedPreferences sharedPrefs2 = getSharedPreferences("SoundSettings", MODE_PRIVATE);
Boolean sound = sharedPrefs2.getBoolean("SoundSet", false);
@Override
public void onClick(View v) {
if(isFlashLightOn){
flashLightButton.setImageResource(R.drawable.flashlight_off);
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
isFlashLightOn = false;
if(vibration == true){
// Get instance of Vibrator from current Context
Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
vib.vibrate(20);
}
else {
// Get instance of Vibrator from current Context
Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
vib.vibrate(00);
}
if (sound == true){
mySound.start();
}
}else{
flashLightButton.setImageResource(R.drawable.flashlight_on);
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
isFlashLightOn = true;
if(vibration == true){
// Get instance of Vibrator from current Context
Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
vib.vibrate(20);
}
else {
// Get instance of Vibrator from current Context
Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 400 milliseconds
vib.vibrate(00);
}
if (sound == true){
mySound.start();
}
}
}
}
private void showNoFlashAlert() {
new AlertDialog.Builder(this)
.setMessage("Your device hardware does not support flashlight!")
.setIcon(android.R.drawable.ic_dialog_alert).setTitle("Error")
.setPositiveButton("Ok", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).show();
}
private boolean isFlashSupported() {
PackageManager pm = getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
@Override
protected void onDestroy() {
if(camera != null){
camera.stopPreview();
camera.release();
camera = null;
}
super.onDestroy();
}}
AndroidManifest.xml
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/btn_switch_on"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Settings"
android:label="@string/app_name">
</activity>
</application>
logcat
E/AndroidRuntime(22941): FATAL EXCEPTION: main
E/AndroidRuntime(22941): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.johncarlo.flashlight/com.example.johncarlo.flashlight.MainActivity}: java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime(22941): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2186)
E/AndroidRuntime(22941): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
E/AndroidRuntime(22941): at android.app.ActivityThread.access$600(ActivityThread.java:145)
E/AndroidRuntime(22941): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
E/AndroidRuntime(22941): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(22941): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(22941): at android.app.ActivityThread.main(ActivityThread.java:5099)
E/AndroidRuntime(22941): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(22941): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(22941): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
E/AndroidRuntime(22941): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
E/AndroidRuntime(22941): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(22941): Caused by: java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime(22941): at android.hardware.Camera.native_setup(Native Method)
E/AndroidRuntime(22941): at android.hardware.Camera.<init>(Camera.java:365)
E/AndroidRuntime(22941): at android.hardware.Camera.open(Camera.java:338)
E/AndroidRuntime(22941): at com.example.johncarlo.flashlight.MainActivity.onCreate(MainActivity.java:49)
E/AndroidRuntime(22941): at android.app.Activity.performCreate(Activity.java:5117)
E/AndroidRuntime(22941): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
E/AndroidRuntime(22941): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
E/AndroidRuntime(22941): ... 11 more
W/ActivityManager( 786): Force finishing activity com.example.johncarlo.flashlight/.MainActivity
E/AndroidRuntime(22941):致命异常:main
E/AndroidRuntime(22941):java.lang.RuntimeException:无法启动活动组件信息{com.example.johncarlo.flashlight/com.example.johncarlo.flashlight.MainActivity}:java.lang.RuntimeException:无法连接到相机服务
E/AndroidRuntime(22941):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2186)
E/AndroidRuntime(22941):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
E/AndroidRuntime(22941):位于android.app.ActivityThread.access$600(ActivityThread.java:145)
E/AndroidRuntime(22941):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
E/AndroidRuntime(22941):位于android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(22941):位于android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(22941):位于android.app.ActivityThread.main(ActivityThread.java:5099)
E/AndroidRuntime(22941):位于java.lang.reflect.Method.Invokenactive(本机方法)
E/AndroidRuntime(22941):位于java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(22941):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
E/AndroidRuntime(22941):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
E/AndroidRuntime(22941):位于dalvik.system.NativeStart.main(本机方法)
E/AndroidRuntime(22941):原因:java.lang.RuntimeException:无法连接到相机服务
E/AndroidRuntime(22941):在android.hardware.Camera.native_设置中(本机方法)
E/AndroidRuntime(22941):在android.hardware.Camera.(Camera.java:365)
E/AndroidRuntime(22941):在android.hardware.Camera.open(Camera.java:338)
E/AndroidRuntime(22941):位于com.example.johncarlo.flashlight.MainActivity.onCreate(MainActivity.java:49)
E/AndroidRuntime(22941):位于android.app.Activity.performCreate(Activity.java:5117)
E/AndroidRuntime(22941):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
E/AndroidRuntime(22941):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
E/AndroidRuntime(22941):。。。还有11个
W/ActivityManager(786):强制完成活动com.example.johncarlo.flashlight/.MainActivity
从onCreate中删除下面的行并将其写入onResume,这样做后它可能不会崩溃
@Override
protected void onResume() {
super.onResume();
registerReceiver(mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
请发布错误日志猫。您是否在清单中添加了权限。添加了日志猫,谢谢谢谢谢谢,但不幸的是,我仍然遇到相同的错误。