【问题标题】:Android Flashlight App not working with the galaxy S1 and Droid XAndroid 手电筒应用程序不适用于 Galaxy S1 和 Droid X
【发布时间】: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


【解决方案1】:

我发现在 Droid X 上唯一有效的是 Siddhpura Amit 在此答案的页面下方提供的代码:Use camera flashlight in Android。他检查制造商并检查它是否包含字符串“motorola”。如果是这样,他有可以打开或关闭相机闪光灯 LED 的特殊代码。我可以验证它是否可以工作,因为我有一个 Motorola Droid X,这是我在我的应用程序中使用的代码。

【讨论】:

    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多