[英]How to detect screen pressure on android?
我想得到屏幕的壓力。 當應用程序運行不正常時,向我顯示一條消息, Unfortunately, Application has stopped.
我還有一個問題,當屏幕壓力變大時,是否可以用一些數學或物理方法換算成克 ( 克 )? 這是我的代碼:
編輯:我正在平板電腦上運行此應用程序
package com.realscale.stefanrafa;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView textinfo;
MotionEvent pressure;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textinfo = (TextView) findViewById(R.id.Information);
float press = pressure.getPressure();
textinfo.setText("Scale: " + (int) press);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
錯誤日志:
08-30 19:53:40.620: W/ActivityThread(29458): Application com.realscale.stefanrafa can be debugged on port 8100... 08-30 19:53:40.710: D/AndroidRuntime(29458): Shutting down VM 08-30 19:53:40.710: W/dalvikvm(29458): threadid=1: thread exiting with uncaught exception (group=0x41a0c2a0)
08-30 19:53:40.715: E/AndroidRuntime(29458): FATAL EXCEPTION: main 08-30 19:53:40.715: E/AndroidRuntime(29458): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.realscale.stefanrafa/com.realscale.stefanrafa.MainActivity}: java.lang.NullPointerException
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.ActivityThread.access$700(ActivityThread.java:140)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.os.Handler.dispatchMessage(Handler.java:99)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.os.Looper.loop(Looper.java:137)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.ActivityThread.main(ActivityThread.java:4921)
08-30 19:53:40.715: E/AndroidRuntime(29458): at java.lang.reflect.Method.invokeNative(Native Method)
08-30 19:53:40.715: E/AndroidRuntime(29458): at java.lang.reflect.Method.invoke(Method.java:511)
08-30 19:53:40.715: E/AndroidRuntime(29458): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 08-30 19:53:40.715: E/AndroidRuntime(29458): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
08-30 19:53:40.715: E/AndroidRuntime(29458): at dalvik.system.NativeStart.main(Native Method)
08-30 19:53:40.715: E/AndroidRuntime(29458): Caused by: java.lang.NullPointerException
08-30 19:53:40.715: E/AndroidRuntime(29458): at com.realscale.stefanrafa.MainActivity.onCreate(MainActivity.java:19)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.Activity.performCreate(Activity.java:5188)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
08-30 19:53:40.715: E/AndroidRuntime(29458): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
08-30 19:53:40.715: E/AndroidRuntime(29458): ... 11 more
壓力是從0到1的浮動。它的含義取決於硬件。 即使有硬件壓力傳感器,實際力與getPressure()
的返回值之間的映射仍然取決於設備。 另外,某些沒有硬件壓力傳感器的設備會根據觸摸點的大小來模擬壓力,也就是說,它們假設壓力越大,手指就越平坦。 其他設備僅返回恆定值。
同樣,力或重量(以牛頓為單位)與質量(以克為單位)不同。 參見http://en.wikipedia.org/wiki/Mass_versus_weight 。
如果您需要有關異常的幫助,則應在源代碼及其所在的行上發布。 adb log
是你的朋友。
編輯:
您使用未初始化的壓力。 它剛剛聲明但未設置為任何內容,因此為null
。 調用其方法之一是NullPointerException。 只有View
(小部件)可以接收MotionEvent
。 您需要對活動進行一些操作(例如,給布局充氣),然后將觸摸偵聽器設置為布局的其中一個視圖:
someView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float pressure = event.getPressure();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.