java - 我正在尝试通过摄像头指示灯在通话中闪烁,但工作不正常

标签 java android xml eclipse android-intent

我正在尝试让设备收到来电时使LED闪光灯闪烁。我的代码在接收中是可以工作的..但是闪光灯不闪烁请检查代码并给我一些建议为什么这个代码不起作用...感谢adv

 MainActivity


  public class MainActivity extends Activity {

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




   @Override
   public boolean onCreateOptionsMenu(Menu menu) {

       getMenuInflater().inflate(R.menu.main, menu); 
       return true;
    }

  }
`


  BroadcastReceiver
  `package com.example.flashringing;

  import org.apache.commons.logging.Log;

  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.hardware.Camera;
    import android.telephony.TelephonyManager;
   import android.widget.Toast;

 public class IncomingCall extends BroadcastReceiver {                                    

    private Camera camera;
    private boolean isFlashOn;
    private boolean hasFlash;
    Camera.Parameters params;

    @Override
    public void onReceive(Context context, Intent intent) {                                          
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);                        
        String msg = "Ringing" + state;
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){                                   
     String incomingNumber  



  =intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);  
           // msg += ". Incoming number is " + incomingNumber;


            Toast.makeText(context, "Brodcaststart>>>>",    


  Toast.LENGTH_LONG).show();
            System.out.print("Brodcaststart>>>>");   

            // TODO This would be a good place to "Do something when the  

  phone rings" ;-)
            String myString = "0101010101";
            long blinkDelay = 50;
            getCamera();

          Toast.makeText(context, "cameraopen>>>>", 
 Toast.LENGTH_LONG).show(); 

            System.out.print("cameraopen>>>>");  

            for (int i = 0; i < myString.length(); i++) {
                if (myString.charAt(i) == '0') {
                    // params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
                    turnOnFlash();
                } else {
                    // 


  params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    turnOffFlash();
                }
                try {
                    Thread.sleep(blinkDelay);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        Toast.makeText(context, msg, Toast.LENGTH_LONG).show();

    }
    private void turnOnFlash() {
        if (!isFlashOn) {
            if (camera == null || params == null) {
                return;
            }

            System.out.print("turnonflash>>>>");  

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


        }

    }

    private void getCamera() {
        if (camera == null) {
            try {
                camera = Camera.open();
                params = camera.getParameters();

                System.out.print("cameraopen>>>>");  
            } catch (RuntimeException e) {
                 // Log.d(  Log.e("Camera Error. Failed to Open. Error: ", 


e.getLocalizedMessage()););



                System.out.println("Camera Error. Failed to Open. Error: 


  "+e.getLocalizedMessage());

            }
        }
    }
    private void turnOffFlash() {
        if (isFlashOn) {
            if (camera == null || params == null) {
                return;
            }


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

        }
      }
    }`



   AndroidManifest.xml`<manifest      

  xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flashringing"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.flashringing.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>

        <receiver
            android:name="com.example.flashringing.IncomingCall"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" >
                </action>
            </intent-filter>
        </receiver>
    </application>

   </manifest>``

最佳答案

我面临类似的问题,仍然无法正常工作。但我认为您可能缺少使用相机的某些权限,即:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.Camera.autofocus"/>


让我知道您如何解决问题

关于java - 我正在尝试通过摄像头指示灯在通话中闪烁,但工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32245436/

相关文章:

java - 比较器和等于()

java - ZXing QR 代码扫描仪嵌入在扫描过程中按下后退按钮

android - 使用编程方式查找哪些 WiFi 热点是公共(public)的或 protected

xml - Xslt 如何设置条件奇数/偶数行的样式

java - Android 布局(固定页眉 + 滚动部分 + 固定页脚)

java - 编辑 java .form xml

java - 使用jsp/servlet将excel数据上传到数据库

java - 如何在 Google map 上选择正确的缩放比例

android - 为什么 Android 存在特定于 Kotlin 的依赖项

java - 重命名主 Activity 后出错