【发布时间】:2012-11-07 05:17:24
【问题描述】:
我的手电筒应用程序适用于 S2 S3 和其他几款 Android 手机,但没有 S1 先进,但由于某种原因无法打开 S1s 闪光灯,这个问题也已在 droid X 和其他几款手机上报告任何熟悉使这些兼容的机器人。代码如下
public class FlashLightActivity extends Activity {
private Camera mCamera;
private Boolean mFlashlight = false;
private Boolean sound = true;
private ImageButton button;
private static MediaPlayer mediaPlayer;
boolean flashInstalled = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flashlight);
AdView ad = (AdView) findViewById(R.id.adView);
ad.loadAd(new AdRequest());
button = (ImageButton) findViewById(R.id.onoff);
mediaPlayer = new MediaPlayer();
Context context = this;
PackageManager pm = context.getPackageManager();
// if device support camera?
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Log.e("err", "Device has no camera!");
Toast.makeText(this, "Your device does not have FlashLight",
Toast.LENGTH_LONG).show();
return;
}
try {
// Checking if flashplayer is available
ApplicationInfo ai = pm.getApplicationInfo("com.adobe.flashplayer",
0);
if (ai != null)
flashInstalled = true;
} catch (NameNotFoundException e) {
flashInstalled = false;
}
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mCamera != null) {
Parameters params = mCamera.getParameters();
if (mFlashlight) {
params.setFlashMode(Parameters.FLASH_MODE_OFF);
button.setImageResource(R.drawable.off_icon);
mFlashlight = false;
} else {
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
button.setImageResource(R.drawable.on_icon);
mediaPlayer = MediaPlayer.create(
FlashLightActivity.this, R.raw.boom);
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
if (sound) {
mediaPlayer.stop();
mediaPlayer = null;
} else {
mediaPlayer.start();
}
v.setKeepScreenOn(true);
mFlashlight = true;
}
mCamera.setParameters(params);
}
}
});
}
@Override
public void onResume() {
super.onResume();
SharedPreferences preferences = getSharedPreferences("pref",
MODE_PRIVATE);
sound = preferences.getBoolean("sound", false);
if (mFlashlight) {
button.setImageResource(R.drawable.on_icon);
} else {
button.setImageResource(R.drawable.off_icon);
}
try {
this.mCamera = Camera.open();
} catch (Exception e) {
}
}
@Override
public void onPause() {
super.onPause();
if (this.mCamera != null) {
this.mCamera.release();
this.mCamera = null;
}
this.mFlashlight = false;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_tabs, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent menuIntent = new Intent(this, MenuActivity.class);
startActivity(menuIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
【问题讨论】:
-
有几件事: 1. 这在我的三星 Galaxy SII 上不起作用(天知道为什么,因为我正试图让它自己工作。我的东西在 Sony XPeria S 上工作,但是不在 SGS II 上)。 2. 您假设所有手机都支持 FLASH_MODE_TORCH - 但有些手机不支持。你试过 FLASH_MODE_ON 吗?你试过别人的手电筒应用吗?如果其他应用程序可以在您的 SG SI 上运行,那么很可能,您只是缺少一些东西 :)
标签: android led flashlight