私は電話ロックアプリと見なすことができるアプリを開発しています。私のアプリは、最初にユーザーが設定したロック画像を設定し、私はちょうどカメラを起動し、私は私の目を覚ますときに写真をクリックしたいと思います。私は今週これを探しています。助けてください。私はこの質問と一緒に自分のコードを添付しています。画面が起動するかロックボタンが押されたときにカメラを起動する方法
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button btncam;
private ImageView imgcam;
static final int REQUEST_IMAGE_CAPTURE=1;
private Uri imguri;
private File f2;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btncam=(Button) findViewById(R.id.btncam);
imgcam=(ImageView) findViewById(R.id.imgcam);
if(!hasCamera())
{
btncam.setEnabled(false);
}
f2=getOutputMediaFile();
imguri=FileProvider.getUriForFile(MainActivity.this,BuildConfig.APPLICATION_ID + ".provider", f2);
if(BitmapFactory.decodeFile(imguri.getPath())!=null)
{
startService();
}
else
{
Toast.makeText(this,"no lock set....please set a lock image",Toast.LENGTH_SHORT).show();
}
btncam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imguri);
startActivityForResult(intent,REQUEST_IMAGE_CAPTURE);
}
});
}
File getOutputMediaFile() {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "CameraDemo");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
return null;
}
}
return new File(mediaStorageDir.getPath() + File.separator +
"IMG.png");
}
private boolean hasCamera()
{
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
public void startService()
{
Intent intent=new Intent(this,MyService.class);
startService(intent);
}
public void stopService()
{
Intent intent=new Intent(this,MyService.class);
stopService(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_IMAGE_CAPTURE && resultCode==RESULT_OK)
{
Bitmap b=BitmapFactory.decodeFile(imguri.getPath());
imgcam.setImageBitmap(b);
Toast.makeText(this,"Lock saved",Toast.LENGTH_SHORT).show();
startService();
}
}
}
Myservice.java
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new LockReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service started", Toast.LENGTH_SHORT).show();
KeyguardManager myKM = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
boolean isPhoneLocked = myKM.inKeyguardRestrictedInputMode();
if(isPhoneLocked==true)
{
Log.v("result","phone is locked");
//Toast.makeText(MyService.this,"Phone is locked",Toast.LENGTH_SHORT).show();
boolean screenOn = intent.getBooleanExtra("screen_state", false);
if (!screenOn) {
// YOUR CODE
Log.v("ans","phone wakes up");
} else {
// YOUR CODE
Log.v("ans","phone sleeping");
}
}
else
{
Log.v("result","phone is unlocked");
//Toast.makeText(MyService.this,"Phone is not locked",Toast.LENGTH_SHORT).show();
}
return START_STICKY;
}
@Override
public void onDestroy() {
Toast.makeText(this, "Service stopped", Toast.LENGTH_SHORT).show();
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Intent restartServiceTask = new Intent(getApplicationContext(),this.getClass());
restartServiceTask.setPackage(getPackageName());
PendingIntent restartPendingIntent =PendingIntent.getService(getApplicationContext(), 1,restartServiceTask, PendingIntent.FLAG_ONE_SHOT);
AlarmManager myAlarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
myAlarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +10, restartPendingIntent);
super.onTaskRemoved(rootIntent);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
LockReceiver.java
public class LockReceiver extends BroadcastReceiver {
private boolean screenOff;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
}
Intent i = new Intent(context,MyService.class);
i.putExtra("screen_state", screenOff);
context.startService(i);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.user.objunlck.MainActivity">
<Button
android:text="set lock"
android:layout_marginRight="75dp"
android:layout_marginLeft="75dp"
android:id="@+id/btncam"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imgcam"
android:layout_marginTop="25dp"
android:layout_gravity="center_horizontal"
android:layout_width="300dp"
android:layout_height="300dp" />
</LinearLayout>
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="/storage/emulated/0" path="."/>
</paths>
たManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.user.objunlck">
<uses-feature
android:name="android.hardware.camera2"
android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
<service android:name=".MyService"
android:exported="false"
android:stopWithTask="false"
android:enabled="true">
</service>
</application>
</manifest>
おかげで...私はあなたがイベントを正しくON/OFFになっていないことを想定しています
私は画面を自分の携帯電話のデフォルトのカメラでACTION_IMAGE_CAPTURE_SECURE、によってロックされているときは、カメラを開くことができる午前also.Nowはい、私が最初に画面のオン・オフイベントを得ていました。しかし、ここでの問題は、このカメラでクリックした画像を任意のフォルダに保存したいということです。しかし、画像はDCIMフォルダに移動しています。助けてください。私は更新されたサービスクラスコードをここに添付しています。役職... –