Sensörlü Kilit Uygulaması
Merhabalar. Telefonu cebinize koyduğunuzda tuşların otomatik kilitlenmesi için bir uygulama geliştiriyorum. Uygulama "Yakınlık (Proximity) Sensörü"nü kullanıyor. Sensörde değişiklik algılandığında "mDevicePolicyManager.lockNow();" komutu çalıştırılarak titreşim ile tuşların kilitlendiğine dair bir geri bildirim veriliyor. Sorularım ise:
- 1. Uygulama sadece kilitleme yapabiliyor. Unlock ile ilgili kayda değer bir sonuç bulamadım. Sensörün önü açıldığında ekranı geri açması için ne yapabilirim?
- 2. Tuşlar kilitlendikten sonra her sensör değişikliğinde titreşim alıyorum. Bu da ekran kilitli olsa dahi uygulamanın ekranı tekrar kilitlediğini gösteriyor. Bu durumu nasıl düzeltebilirim?
MainActivity.java
[code]
package com.example.cepkilden;
import com.example.cepkilden.R;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {private static final int ADMIN_INTENT = 15;
private static final String description = "Ekranı kilitleyebilmek için yetkilendirin";
private DevicePolicyManager mDevicePolicyManager;
private ComponentName mComponentName;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDevicePolicyManager = (DevicePolicyManager)getSystemService(
Context.DEVICE_POLICY_SERVICE);
mComponentName = new ComponentName(MainActivity.this, MyAdminReceiver.class);
Button btnEnableAdmin = (Button) findViewById(R.id.btnEnable);
Button btnDisableAdmin = (Button) findViewById(R.id.btnDisable);
btnEnableAdmin.setOnClickListener(MainActivity.this);
btnDisableAdmin.setOnClickListener(MainActivity.this);
sensorBilgisi = (TextView)findViewById(R.id.textView1);
sensorBilgisi.setText("Sensor bilgisi alınıyor..");
sensorYoneticisi = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
yakinSensoru = sensorYoneticisi.getDefaultSensor(Sensor.TYPE_PROXIMITY);
sensorYoneticisi.registerListener(sensorDinleyicisi,yakinSensoru,
SensorManager.SENSOR_DELAY_FASTEST);
}@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnEnable:
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,description);
startActivityForResult(intent, ADMIN_INTENT);
break;case R.id.btnDisable:
mDevicePolicyManager.removeActiveAdmin(mComponentName);
Toast.makeText(getApplicationContext(), "Admin registration removed", Toast.LENGTH_SHORT).show();
break;
}
}@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ADMIN_INTENT) {
if (resultCode == RESULT_OK) {
Toast.makeText(getApplicationContext(), "Yönetici olarak kaydedildi", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "Yönetici olarak kaydedilemedi", Toast.LENGTH_SHORT).show();
}
}
}SensorManager sensorYoneticisi;
Sensor yakinSensoru;
TextView sensorBilgisi;
SensorEventListener sensorDinleyicisi = new SensorEventListener(){@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_PROXIMITY){
sensorBilgisi.setText("Yakınlık:"+ String.valueOf(event.values[0]));
if (String.valueOf(event.values[0])=="0.0")
{
boolean isAdmin = mDevicePolicyManager.isAdminActive(mComponentName);
if (isAdmin) {
mDevicePolicyManager.lockNow();
Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(200);}
else{
Toast.makeText(getApplicationContext(), "Yönetici olarak kayıtlı değil", Toast.LENGTH_SHORT).show();}
}
}
}
};
}[/code]
MyAdminReceiver.java
[code]
package com.example.cepkilden;
import android.app.admin.DeviceAdminReceiver;
public class MyAdminReceiver extends DeviceAdminReceiver{
}
[/code]
activity_main.xml
[code]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" ><TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="56dp"
android:layout_marginTop="36dp"
android:text="@string/textView1" /><Button
android:id="@+id/btnEnable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="22dp"
android:text="Enable" /><Button
android:id="@+id/btnDisable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btnEnable"
android:layout_below="@+id/btnEnable"
android:text="Disable" /></RelativeLayout>
[/code]
AndroidManifest.xml
[code]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cepkilden"
android:versionCode="1"
android:versionName="1.0" ><uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK"/><application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.cepkilden.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="MyAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin" /><intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
</application></manifest>
[/code]