質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2423閲覧

MediaRecorderの問題。getFolderSize() : Exception_1 = java.lang.NullPointerException:

Morimokuseijin

総合スコア7

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/02/15 08:46

こんにちは、
Androidプログラミングに関しての質問です。
MediaRecorder
以下の通りにコードを実施すると、一番下のエラーが出てしまいます。
カメラが3つついている端末を用いているため、それがエラーを引き起こしているのではないかと考えているのですが、対処方法がわかりません。
よろしくお願いします。

MainActivity

package com.morimoku.mediarecorder; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.VideoView; import static android.Manifest.permission.READ_EXTERNAL_STORAGE; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private static final int RECORD_REQUEST_CODE = 103; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int Permission_All = 1; String[] Permissions = {Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, READ_EXTERNAL_STORAGE, Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.READ_EXTERNAL_STORAGE}; if (!hasPermissions(this, Permissions)) { ActivityCompat.requestPermissions(this, Permissions, Permission_All); } VideoView videoView = findViewById(R.id.videoView1); Button button1 = findViewById(R.id.button_start); button1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View view) { startService(); } } ); } public static boolean hasPermissions(Context context, String... permissions) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { for (String permission : permissions) { if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } } return true; } } The part where it starts recording.
public class Recorder extends Service { public static final String CHANNEL_ID = "ForegroundServiceChannel"; private static final int VIDEO_DURATION = 30 * 60 * 1000; private static final long VIDEO_FILESIZE = 1024 * 1024 * 1024; private Camera mCamera; private boolean isRecording = false; private MediaRecorder mMediaRecorder; private static String fileName = null; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); Log.d("debug","onCreate"); } @RequiresApi(Build.VERSION_CODES.O) public int onStartCommand(Intent intent,int flags,int startId) { super.onStartCommand(intent, flags, startId); String input = intent.getStringExtra("inputExtra"); createNotificationChannel(); Intent notificationintent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationintent, 0); //Foreground Service Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.mipmap.ic_launcher) .setTicker(getString(R.string.app_name)) .setAutoCancel(true) .setContentTitle(getString(R.string.app_name)) .setContentIntent(pendingIntent) .setContentText(getString(R.string.app_name)) .build(); startForeground(1, notification); //動作を書き込む isRecording = true; mCamera = Camera.open(); Camera.Parameters cameraParameters = mCamera.getParameters(); cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); mCamera.setParameters(cameraParameters); mCamera.unlock(); fileName = getExternalCacheDir().getAbsolutePath(); fileName += "/audiorecordtest.3gp"; mMediaRecorder = new MediaRecorder(); mMediaRecorder.setCamera(mCamera); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mMediaRecorder.setOutputFile(fileName); mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); mMediaRecorder.setMaxDuration(VIDEO_DURATION); mMediaRecorder.setMaxFileSize(VIDEO_FILESIZE); try { mMediaRecorder.prepare(); mMediaRecorder.start(); Log.d("debug","startrecording"); } catch (IOException ex) { ex.printStackTrace(); stopForeground(true); mMediaRecorder.release(); mCamera.lock(); mCamera.release(); isRecording = false; ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(3000); } return START_STICKY; }

マニフェストの部分

<manifest xmlns:android="http://schemas.android.com/apk/res/android" <uses-feature android:name="android.hardware.Camera" android:required="true"></uses-feature> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

エラーメッセージ

E/Perf: Fail to get file list com.morimoku.driverecorder getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array W/u.driverecorde: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed) W/u.driverecorde: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed) W/Gralloc3: mapper 3.x is not supported W/AdrenoUtils: <ReadGpuID_from_sysfs:194>: Failed to open /sys/class/kgsl/kgsl-3d0/gpu_model <ReadGpuID:218>: Failed to read chip ID from gpu_model. Fallback to use the GSL path D/debug: onCreate E/libc: Access denied finding property "vendor.camera.hal1.packagelist" I/Utils: getMaxFileSize: result=4020731904, free=4020731904, max files size=0 E/MediaRecorder: start failed: -22 D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.morimoku.driverecorder, PID: 10077 java.lang.RuntimeException: Unable to start service com.morimoku.driverecorder.DriveRecorder@e0e277e with Intent { cmp=com.morimoku.driverecorder/.DriveRecorder (has extras) }: java.lang.RuntimeException: start failed. at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4117) at android.app.ActivityThread.access$1800(ActivityThread.java:225) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:359) at android.app.ActivityThread.main(ActivityThread.java:7418) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935) Caused by: java.lang.RuntimeException: start failed. at android.media.MediaRecorder.start(Native Method) at com.morimoku.driverecorder.DriveRecorder.onStartCommand(DriveRecorder.java:116) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4099) at android.app.ActivityThread.access$1800(ActivityThread.java:225) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:359) at android.app.ActivityThread.main(ActivityThread.java:7418) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Android MediaRecorder の使い方を確認してください。今回はその記述例に問題があり、エラーが発生しました。MediaRecorderの部分の問題を解決したらエラーは出なくなりましたが、また新たな問題が起きました。今回の質問と大きく脱線するので、ここまでします。

投稿2020/04/26 05:51

Morimokuseijin

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問