我正在编写一个应用程序来通过点亮 Android 设备的 LED 来制作灯笼。大多数情况下它运行良好,但有时我会在 logCat 中看到消息“E/BufferQueueProducer:[unnamed-5260-0] queueBuffer:BufferQueue 已被放弃”。
之后,应用程序无法点亮设备的 LED。当方向改变时,它能够再次获得对 LED 的控制……很奇怪。我做了很多改变,但我唯一能做的就是把它彻底搞砸,这样它就永远不能点亮 LED。
你能帮我解决这个问题吗?
我附上了我的 .java 文件和对应于这个问题的 logCat。
package com.spc.acrux.linterna;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.apptracker.android.track.AppTracker;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import java.io.IOException;
public class MainActivity extends ActionBarActivity {
// Remove the below line after defining your own ad unit ID.
//private static final String TOAST_TEXT = "Test ads are being shown. "
// + "To show live ads, replace the ad unit ID in res/values/strings.xml with your own ad unit ID.";
private static final int START_LEVEL = 1;
private int mLevel;
private Button mNextLevelButton;
private InterstitialAd mInterstitialAd;
private TextView mLevelTextView;
private Camera camera;
//flag to detect flash is on or off
private boolean isLighOn = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// For LeadBolt
if(savedInstanceState == null) {
// Initialize Leadbolt SDK with your api key
AppTracker.startSession(getApplicationContext(), "hhxSJ6GsjLqcGFQgIA7zunbhKe5NbX1k");
}
// cache Leadbolt Ad without showing it
AppTracker.loadModuleToCache(getApplicationContext(),"inapp");
// Mostrar un anuncio
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
// Crear el boton ON / OFF
Button holaPlayerBtn = (Button)findViewById(R.id.buttononoff);
// call this when you want to display the Leadbolt Interstitial
AppTracker.loadModule(getApplicationContext(),"inapp");
Context context = this;
PackageManager pm = context.getPackageManager();
// if device support camera?
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Log.e("err", "Device has no camera!");
return;
}
camera = Camera.open();
try {
camera.setPreviewTexture(new SurfaceTexture(0));
} catch (IOException e) {
e.printStackTrace();
}
final Parameters p = camera.getParameters();
// Create the next level button, which tries to show an interstitial when clicked.
mNextLevelButton = ((Button) findViewById(R.id.next_level_button));
mNextLevelButton.setEnabled(false);
mNextLevelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showInterstitial();
}
});
// Create the text view to show the level number.
mLevelTextView = (TextView) findViewById(R.id.level);
mLevel = START_LEVEL;
// Create the InterstitialAd and set the adUnitId (defined in values/strings.xml).
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
mNextLevelButton.setEnabled(true);
}
@Override
public void onAdFailedToLoad(int errorCode) {
mNextLevelButton.setEnabled(true);
}
@Override
public void onAdClosed() {
// Proceed to the next level.
goToNextLevel();
}
});
loadInterstitial();
// Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
//Toast.makeText(this, TOAST_TEXT, LENGTH_LONG).show();
//Lo que hace el botón "Hola" que se usa para encender y apagar la linterna
holaPlayerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
String TEXTO = getString(R.string.pulsaste);
Toast.makeText(MainActivity.this, TEXTO, Toast.LENGTH_LONG).show();
//Aqui hay que activar el flash y la cámara
if (isLighOn) {
Log.i("info", "torch is turn off!");
p.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
camera.stopPreview();
isLighOn = false;
} else {
Log.i("info", "torch is turn on!");
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
camera.startPreview();
isLighOn = true;
}
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.Otras_apps:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pub:\"Pedro Santangelo\"") ) );
return true;
case R.id.salir:
// FlurryAgent.onEndSession(this);
{
if (camera != null) {
camera.release();
}
this.finish();
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
private void showInterstitial() {
// Show the ad if it's ready. Oth<string name="otras_apps">Otras Aplicaciones</string>oast and reload the ad.
if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Toast.makeText(this, getString(R.string.AdError), Toast.LENGTH_SHORT).show();
goToNextLevel();
}
}
private void loadInterstitial() {
// Disable the next level button and load the ad.
mNextLevelButton.setEnabled(false);
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);
}
private void goToNextLevel() {
// Show the next level and reload the ad to prepare for the level after.
mLevelTextView.setText(getString(R.string.Nivel) + " " + (++mLevel));
loadInterstitial();
}
//public void activar() {
//Activar o desactivar la linterna... no se usa ya.
// final String TEXTO = "Pulsaste ON / OFF ";
// Toast.makeText(this, TEXTO, LENGTH_LONG).show();
//}
@Override
protected void onDestroy() {
super.onDestroy();
if (camera != null) {
camera.release();
}
}
/*
@Override
public void onPause() {
super.onPause();
if (camera != null) {
camera.release();
}
}
@Override
public void onStop() {
super.onStop();
if (camera != null) {
camera.release();
}
}
*/
}
===== logCat如图:========
05-11 19:15:23.515 5260-5260/? I/art﹕ Late-enabling -Xcheck:jni
05-11 19:15:23.751 5260-5260/com.spc.acrux.linterna I/AppTracker﹕ Session started. SDK Version in use 5.1
05-11 19:15:23.756 5260-5260/com.spc.acrux.linterna W/AppTracker﹕ Event listener is not implemented before startSession get called.
05-11 19:15:23.805 5260-5260/com.spc.acrux.linterna I/AppTracker﹕ Loading module with caching enabled for location:inapp
05-11 19:15:23.842 5260-5260/com.spc.acrux.linterna W/ResourcesManager﹕ Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
05-11 19:15:23.842 5260-5260/com.spc.acrux.linterna W/ResourcesManager﹕ Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.
05-11 19:15:24.011 5260-5260/com.spc.acrux.linterna I/WebViewFactory﹕ Loading com.google.android.webview version 42.0.2311.138 (code 2311138)
05-11 19:15:24.038 5260-5260/com.spc.acrux.linterna I/LibraryLoader﹕ Time to load native libraries: 3 ms (timestamps 8049-8052)
05-11 19:15:24.038 5260-5260/com.spc.acrux.linterna I/LibraryLoader﹕ Expected native library version number "",actual native library version number ""
05-11 19:15:24.057 5260-5260/com.spc.acrux.linterna V/WebViewChromiumFactoryProvider﹕ Binding Chromium to main looper Looper (main, tid 1) {23b24f79}
05-11 19:15:24.057 5260-5260/com.spc.acrux.linterna I/LibraryLoader﹕ Expected native library version number "",actual native library version number ""
05-11 19:15:24.058 5260-5260/com.spc.acrux.linterna I/chromium﹕ [INFO:library_loader_hooks.cc(112)] Chromium logging enabled: level = 0, default verbosity = 0
05-11 19:15:24.072 5260-5260/com.spc.acrux.linterna I/BrowserStartupController﹕ Initializing chromium process, singleProcess=true
05-11 19:15:24.073 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:24.075 5260-5260/com.spc.acrux.linterna E/SysUtils﹕ ApplicationContext is null in ApplicationStatus
05-11 19:15:24.098 5260-5348/com.spc.acrux.linterna W/AudioManagerAndroid﹕ Requires BLUETOOTH permission
05-11 19:15:24.098 5260-5260/com.spc.acrux.linterna W/chromium﹕ [WARNING:resource_bundle.cc(286)] locale_file_path.empty()
05-11 19:15:24.099 5260-5260/com.spc.acrux.linterna I/chromium﹕ [INFO:aw_browser_main_parts.cc(63)] Load from apk succesful, fd=38 off=57784 len=4071
05-11 19:15:24.101 5260-5260/com.spc.acrux.linterna I/chromium﹕ [INFO:aw_browser_main_parts.cc(76)] Loading webviewchromium.pak from, fd:39 off:7953032 len:1161174
05-11 19:15:24.111 5260-5260/com.spc.acrux.linterna I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:379>: QUALCOMM Build: 01/14/15, ab0075f, Id3510ff6dc
05-11 19:15:24.178 5260-5260/com.spc.acrux.linterna I/Ads﹕ CsiReporterFactory: CSI is not enabled. No CSI reporter created.
05-11 19:15:24.186 5260-5260/com.spc.acrux.linterna I/Ads﹕ Starting ad request.
05-11 19:15:24.189 5260-5260/com.spc.acrux.linterna I/Ads﹕ Use AdRequest.Builder.addTestDevice("46B876313BCC4B37C16A2B0F9ECCAD83") to get test ads on this device.
05-11 19:15:24.209 5260-5260/com.spc.acrux.linterna I/AppTracker﹕ Loading module for location:inapp
05-11 19:15:24.213 5260-5260/com.spc.acrux.linterna W/AppTracker﹕ No Ad available for location inapp. Please run loadModuleToCache first
05-11 19:15:24.213 5260-5260/com.spc.acrux.linterna E/AppTracker﹕ Module inapp failed to load:ad not ready
05-11 19:15:24.400 5260-5260/com.spc.acrux.linterna I/Ads﹕ Starting ad request.
05-11 19:15:24.400 5260-5260/com.spc.acrux.linterna I/Ads﹕ Use AdRequest.Builder.addTestDevice("46B876313BCC4B37C16A2B0F9ECCAD83") to get test ads on this device.
05-11 19:15:24.423 5260-5428/com.spc.acrux.linterna D/OpenGLRenderer﹕ Use EGL_SWAP_BEHAVIOR_PRESERVED: true
05-11 19:15:24.434 5260-5260/com.spc.acrux.linterna D/Atlas﹕ Validating map...
05-11 19:15:24.475 5260-5428/com.spc.acrux.linterna I/OpenGLRenderer﹕ Initialized EGL, version 1.4
05-11 19:15:24.481 5260-5428/com.spc.acrux.linterna D/OpenGLRenderer﹕ Enabling debug mode 0
05-11 19:15:26.050 5260-5260/com.spc.acrux.linterna I/AppTracker﹕ Module inapp cached successfully.
05-11 19:15:27.554 5260-5361/com.spc.acrux.linterna W/chromium﹕ [WARNING:data_reduction_proxy_config.cc(150)] SPDY proxy OFF at startup
05-11 19:15:27.573 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:27.590 5260-5260/com.spc.acrux.linterna W/AwContents﹕ onDetachedFromWindow called when already detached. Ignoring
05-11 19:15:27.608 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:27.608 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:27.730 5260-5260/com.spc.acrux.linterna W/BindingManager﹕ Cannot call determinedVisibility() - never saw a connection for the pid: 5260
05-11 19:15:27.807 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:27.809 5260-5260/com.spc.acrux.linterna W/AwContents﹕ onDetachedFromWindow called when already detached. Ignoring
05-11 19:15:27.820 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:27.820 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:15:27.871 5260-5260/com.spc.acrux.linterna W/BindingManager﹕ Cannot call determinedVisibility() - never saw a connection for the pid: 5260
05-11 19:15:29.284 5260-5260/com.spc.acrux.linterna I/Ads﹕ Ad finished loading.
05-11 19:15:30.291 5260-5260/com.spc.acrux.linterna I/Ads﹕ Scheduling ad refresh 30000 milliseconds from now.
05-11 19:15:30.300 5260-5260/com.spc.acrux.linterna I/Ads﹕ Ad finished loading.
05-11 19:15:50.616 5260-5260/com.spc.acrux.linterna I/info﹕ torch is turn on!
05-11 19:15:50.732 5260-5428/com.spc.acrux.linterna V/RenderScript﹕ Application requested CPU execution
05-11 19:15:50.742 5260-5428/com.spc.acrux.linterna V/RenderScript﹕ 0x9c94c800 Launching thread(s), CPUs 4
05-11 19:15:58.265 5260-5260/com.spc.acrux.linterna I/info﹕ torch is turn off!
05-11 19:15:58.808 5260-5260/com.spc.acrux.linterna I/Choreographer﹕ Skipped 32 frames! The application may be doing too much work on its main thread.
05-11 19:16:00.292 5260-5260/com.spc.acrux.linterna I/Ads﹕ Starting ad request.
05-11 19:16:00.293 5260-5260/com.spc.acrux.linterna I/Ads﹕ Use AdRequest.Builder.addTestDevice("46B876313BCC4B37C16A2B0F9ECCAD83") to get test ads on this device.
05-11 19:16:01.011 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:16:01.016 5260-5260/com.spc.acrux.linterna W/AwContents﹕ onDetachedFromWindow called when already detached. Ignoring
05-11 19:16:01.030 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:16:01.030 5260-5260/com.spc.acrux.linterna W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring
05-11 19:16:01.096 5260-5260/com.spc.acrux.linterna W/BindingManager﹕ Cannot call determinedVisibility() - never saw a connection for the pid: 5260
05-11 19:16:01.687 5260-5260/com.spc.acrux.linterna I/Ads﹕ Scheduling ad refresh 30000 milliseconds from now.
05-11 19:16:01.690 5260-5260/com.spc.acrux.linterna I/Ads﹕ Ad finished loading.
05-11 19:16:01.747 5260-5260/com.spc.acrux.linterna W/BindingManager﹕ Cannot call determinedVisibility() - never saw a connection for the pid: 5260
05-11 19:16:08.705 5260-5260/com.spc.acrux.linterna I/info﹕ torch is turn on!
05-11 19:16:10.141 5260-5278/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] queueBuffer: BufferQueue has been abandoned
05-11 19:16:10.146 5260-6865/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned
05-11 19:16:10.146 5260-5279/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned
05-11 19:16:10.147 5260-5278/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned
05-11 19:16:10.147 5260-6865/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned
05-11 19:16:10.148 5260-5279/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned
05-11 19:16:10.148 5260-5278/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned
05-11 19:16:10.149 5260-6865/com.spc.acrux.linterna E/BufferQueueProducer﹕ [unnamed-5260-0] dequeueBuffer: BufferQueue has been abandoned