2016-04-10 18 views
-2

Android'le yeni oluyorum ve gürültü düzeyini analiz edebilen bir uygulama yapmaya çalışıyorum ve yararlı bir kaynak buldum maalesef yukarıda belirtilen hatayı alıyorum. Tüm dosyalarımı ekledim, bu yüzden düzeltmek için herhangi bir ipucu gerçekten takdir edilecektir.Belirtilen adla eşleşen kaynak bulunamadı ('çizilebilir/simge' değerinde 'simgesiyle')

Bu, açık bir dosyadır.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.prabalgupta.noisealert" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="23" /> 

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

    <application 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" > 
     <activity 
      android:name="com.androidexample.noisealert.NoiseAlert" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!-- 
      ATTENTION: This was auto-generated to add Google Play services to your project for 
      App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. 
     --> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
    </application> 

</manifest> 

noisealert.java

import android.app.Activity; 
import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.PowerManager; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.appindexing.Action; 
import com.google.android.gms.appindexing.AppIndex; 
import com.google.android.gms.common.api.GoogleApiClient; 

public class NoiseAlert extends Activity { 
/* constants */ 
private static final int POLL_INTERVAL = 300; 

/** 
* running state 
**/ 
private boolean mRunning = false; 

/** 
* config state 
**/ 
private int mThreshold; 

private PowerManager.WakeLock mWakeLock; 

private Handler mHandler = new Handler(); 

/* References to view elements */ 
private TextView mStatusView; 
private SoundLevelView mDisplay; 

/* data source */ 
private SoundMeter mSensor; 


/****************** 
* Define runnable thread again and again detect noise 
*********/ 

private Runnable mSleepTask = new Runnable() { 
    public void run() { 
     //Log.i("Noise", "runnable mSleepTask"); 

     start(); 
    } 
}; 

// Create runnable thread to Monitor Voice 
private Runnable mPollTask = new Runnable() { 
    public void run() { 

     double amp = mSensor.getAmplitude(); 
     //Log.i("Noise", "runnable mPollTask"); 
     updateDisplay("Monitoring Voice...", amp); 

     if ((amp > mThreshold)) { 
      callForHelp(); 
      //Log.i("Noise", "==== onCreate ==="); 

     } 

     // Runnable(mPollTask) will again execute after POLL_INTERVAL 
     mHandler.postDelayed(mPollTask, POLL_INTERVAL); 

    } 
}; 
/** 
* ATTENTION: This was auto-generated to implement the App Indexing API. 
* See https://g.co/AppIndexing/AndroidStudio for more information. 
*/ 
private GoogleApiClient client; 

/*********************************************************/ 

/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Defined SoundLevelView in main.xml file 
    setContentView(R.layout.main); 
    mStatusView = (TextView) findViewById(R.id.status); 

    // Used to record voice 
    mSensor = new SoundMeter(); 
    mDisplay = (SoundLevelView) findViewById(R.id.volume); 

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "NoiseAlert"); 
    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
} 


@Override 
public void onResume() { 
    super.onResume(); 
    //Log.i("Noise", "==== onResume ==="); 

    initializeApplicationConstants(); 
    mDisplay.setLevel(0, mThreshold); 

    if (!mRunning) { 
     mRunning = true; 
     start(); 
    } 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    Action viewAction = Action.newAction(
      Action.TYPE_VIEW, // TODO: choose an action type. 
      "NoiseAlert Page", // TODO: Define a title for the content shown. 
      // TODO: If you have web page content that matches this app activity's content, 
      // make sure this auto-generated web page URL is correct. 
      // Otherwise, set the URL to null. 
      Uri.parse("http://host/path"), 
      // TODO: Make sure this auto-generated app deep link URI is correct. 
      Uri.parse("android-app://com.example.prabalgupta.noisealert/http/host/path") 
    ); 
    AppIndex.AppIndexApi.end(client, viewAction); 
    // Log.i("Noise", "==== onStop ==="); 

    //Stop noise monitoring 
    stop(); 

    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    client.disconnect(); 
} 

private void start() { 
    //Log.i("Noise", "==== start ==="); 

    mSensor.start(); 
    if (!mWakeLock.isHeld()) { 
     mWakeLock.acquire(); 
    } 

    //Noise monitoring start 
    // Runnable(mPollTask) will execute after POLL_INTERVAL 
    mHandler.postDelayed(mPollTask, POLL_INTERVAL); 
} 

private void stop() { 
    Log.i("Noise", "==== Stop Noise Monitoring==="); 
    if (mWakeLock.isHeld()) { 
     mWakeLock.release(); 
    } 
    mHandler.removeCallbacks(mSleepTask); 
    mHandler.removeCallbacks(mPollTask); 
    mSensor.stop(); 
    mDisplay.setLevel(0, 0); 
    updateDisplay("stopped...", 0.0); 
    mRunning = false; 

} 


private void initializeApplicationConstants() { 
    // Set Noise Threshold 
    mThreshold = 8; 

} 

private void updateDisplay(String status, double signalEMA) { 
    mStatusView.setText(status); 
    // 
    mDisplay.setLevel((int) signalEMA, mThreshold); 
} 


private void callForHelp() { 

    //stop(); 

    // Show alert when noise thersold crossed 
    Toast.makeText(getApplicationContext(), "Noise Thersold Crossed, do here your stuff.", 
      Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 

    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    client.connect(); 
    Action viewAction = Action.newAction(
      Action.TYPE_VIEW, // TODO: choose an action type. 
      "NoiseAlert Page", // TODO: Define a title for the content shown. 
      // TODO: If you have web page content that matches this app activity's content, 
      // make sure this auto-generated web page URL is correct. 
      // Otherwise, set the URL to null. 
      Uri.parse("http://host/path"), 
      // TODO: Make sure this auto-generated app deep link URI is correct. 
      Uri.parse("android-app://com.example.prabalgupta.noisealert/http/host/path") 
    ); 
    AppIndex.AppIndexApi.start(client, viewAction); 
} 
}; 

SoundLevelView.java

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.view.View; 

class SoundLevelView extends View { 
private Drawable mGreen; 
private Drawable mRed; 
private Paint mBackgroundPaint; 

private int mHeight; 
private int mWidth; 

private int mThreshold = 0; 
private int mVol = 0; 


public SoundLevelView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    mGreen = context.getResources().getDrawable(
      R.drawable.greenbar); 
    mRed = context.getResources().getDrawable(
      R.drawable.redbar); 

    mWidth = mGreen.getIntrinsicWidth(); 
    setMinimumWidth(mWidth*10); 

    mHeight = mGreen.getIntrinsicHeight(); 
    setMinimumHeight(mHeight); 

    //Used to paint canvas background color 
    mBackgroundPaint = new Paint(); 
    mBackgroundPaint.setColor(Color.BLACK); 

} 

public void setLevel(int volume, int threshold) { 
    if (volume == mVol && threshold == mThreshold) return; 
    mVol = volume; 
    mThreshold = threshold; 

    // invalidate Call onDraw method and draw voice points 
    invalidate(); 
} 

@Override 
public void onDraw(Canvas canvas) { 

    canvas.drawPaint(mBackgroundPaint); 

    for (int i=0; i<= mVol; i++) { 
     Drawable bar; 
     if (i< mThreshold) 
      bar = mGreen; 
     else 
      bar = mRed; 

     bar.setBounds((10-i)*mWidth, 0, (10-i+1)*mWidth, mHeight); 
     bar.draw(canvas); 
    } 
} 
} 

SoundMeter.java

import java.io.IOException; 
import android.media.MediaRecorder; 

public class SoundMeter { 
// This file is used to record voice 
static final private double EMA_FILTER = 0.6; 

private MediaRecorder mRecorder = null; 
private double mEMA = 0.0; 

public void start() { 

    if (mRecorder == null) { 

     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mRecorder.setOutputFile("/dev/null"); 

     try { 
      mRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     mRecorder.start(); 
     mEMA = 0.0; 
    } 
} 

public void stop() { 
    if (mRecorder != null) { 
     mRecorder.stop(); 
     mRecorder.release(); 
     mRecorder = null; 
    } 
} 

public double getAmplitude() { 
    if (mRecorder != null) 
     return (mRecorder.getMaxAmplitude()/2700.0); 
    else 
     return 0; 

} 

public double getAmplitudeEMA() { 
    double amp = getAmplitude(); 
    mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA; 
    return mEMA; 
} 

Activity_noise_alert.xml

senin Manifest dosyasında
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
> 
<TextView 
    android:id="@+id/status" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:textSize="25sp" 
    android:textStyle="bold" 
    android:text="stopped" 
    /> 
<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     > 

     <com.androidexample.noisealert.SoundLevelView 
      android:id="@+id/volume" 
      android:layout_width="230sp" 
      android:layout_height="60sp" 

      /> 
    </LinearLayout> 
</RelativeLayout> 

+0

teşekkür ederim. –

+1

Lütfen en az bir örnek göndermeyi deneyin. Sorununuzu yeniden üretmemiz için gereken en küçük kod miktarı. Yayınladığınız şey, üzerinde çalışmak için çok fazla ve sorunuzu yanıtlamayı zorlaştıracak. http://stackoverflow.com/help/mcve – nhouser9

cevap

0

0 bu kodu android:icon="@drawable/icon" aracılığıyla uygulamaya için simge belirlemek için çalışıyoruz.

Bu, res/drawable klasöründe bir icon.png img dosyanızın olması gerektiğini gösterir. Diğer bir deyişle, bir icon.png imgülü çizilebilir klasörün içine yerleştirilirse sorununuz çözülür. img dosya isminin icon.png olması zorunlu değil, ic_launcher.png gibi herhangi bir ad olabilir ..... o zaman bu gibi bir manifesto dosyanızı değiştirmelisiniz. android:icon="@drawable/ic_launcher"

ama img png formatı olacaktır.

sizin `drawable` klasöründe` icon.png` adlı bir dosya kaçırma gibi görünüyor

İlgili konular