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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

Q&A

解決済

1回答

1945閲覧

androidのusbホスト機能でUsbDeviceを開くとアプリが繰り返し停止する

okioki

総合スコア5

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Android Studio

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

0グッド

0クリップ

投稿2020/02/16 09:40

現在の状況

マイコンとAndroid端末とをシリアル通信するためのアプリを開発しております。現在可能なのは、マイコンと接続すると「(アプリ名)を起動して(デバイス名)を処理しますか?」という表示が出て、アプリの"unconnected"という表示を"connected"に変えるところまでです。

###課題
マイコンから送られてくるデータをandroid側で受信して表示させたいのですが、UsbDeviceのインスタンスを生成する処理を入れてアプリを起動させると「アプリが繰り返し停止しています」という表示が出て何も開かれません。ソースコードは以下の通りです。

java

1package com.example.**********; 2 3import androidx.appcompat.app.AppCompatActivity; 4 5import android.app.PendingIntent; 6import android.content.Intent; 7import android.graphics.Color; 8import android.hardware.usb.UsbDevice; 9import android.hardware.usb.UsbManager; 10import android.hardware.usb.UsbDeviceConnection; 11import android.os.Bundle; 12import android.hardware.usb.UsbInterface; 13import android.hardware.usb.UsbEndpoint; 14import android.widget.TextView; 15import android.widget.Toast; 16 17import java.util.HashMap; 18 19public class MainActivity extends AppCompatActivity { 20 21 UsbDevice myusbdevice; 22 UsbManager myusbmanager; 23 UsbDeviceConnection connection; 24 UsbEndpoint endpoint; 25 26 private byte[] bytes; 27 private static int TIMEOUT = 0; 28 private boolean forceClaim = true; 29 30 @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.activity_main); 34 } 35 36 public void onResume(){ 37 super.onResume(); 38 myusbmanager = (UsbManager)getSystemService(USB_SERVICE); 39 TextView checker = (TextView)findViewById(R.id.check); 40 boolean judge = ConnectCheck(checker); 41 42 if(judge) { 43 Toast toast = Toast.makeText(MainActivity.this, "接続完了", Toast.LENGTH_LONG); 44 toast.show(); 45 /* 46 if(myusbmanager.hasPermission(myusbdevice)) { 47 //ここのコメントアウトを外すとエラーが発生その1 48 } 49 */ 50 51 //UsbInterface intf = myusbdevice.getInterface(0); //ここのコメントアウトを外すとエラーが発生その2 52 //endpoint = intf.getEndpoint(0); 53 //connection = myusbmanager.openDevice(myusbdevice); 54 //connection.claimInterface(intf, forceClaim); 55 //connectDevice(); 56 } 57 } 58 59 public void onPause() { 60 super.onPause(); 61 myusbdevice = null; 62 } 63 64 private boolean ConnectCheck(TextView checker){ 65 HashMap<String, UsbDevice> deviceList = myusbmanager.getDeviceList(); 66 67 if(deviceList == null || deviceList.isEmpty()){ 68 checker.setText("unconnected"); 69 checker.setTextColor(Color.RED); 70 return false; 71 } 72 else{ 73 checker.setText("connected"); 74 checker.setTextColor(Color.GREEN); 75 return true; 76 } 77 } 78 79 private void connectDevice() { 80 new Thread(new Runnable() { 81 @Override 82 public void run() { 83 connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); 84 } 85 }).start(); 86 } 87}

xml

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.*********"> 4 <uses-feature android:name="android.hardware.usb.host" /> 5 <uses-sdk android:minSdkVersion="12"/> 6 <application 7 android:allowBackup="true" 8 android:icon="@mipmap/ic_launcher" 9 android:label="@string/app_name" 10 android:roundIcon="@mipmap/ic_launcher_round" 11 android:supportsRtl="true" 12 android:theme="@style/Theme.AppCompat"> 13 <activity android:name=".MainActivity"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN" /> 16 17 <category android:name="android.intent.category.LAUNCHER" /> 18 </intent-filter> 19 <intent-filter> 20 <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 21 </intent-filter> 22 <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 23 android:resource="@xml/device_filter" /> 24 </activity> 25 26 </application> 27 28</manifest>

「ここのコメントアウトを外すとエラーが発生」という箇所に共通するのはUsbDeviceに関わる処理であることであり、これが原因であることが予想されるのですが、なぜ落ちてしまうのか解りません。回答の方よろしくお願いいたします。

###追記
今回の開発で使用しているandroidのバージョンは9です。

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

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

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

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

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

guest

回答1

0

自己解決

以下のコードの追記が必要です

java

1myusbdevice = (UsbDevice) getIntent().getParcelableExtra(UsbManager.EXTRA_DEVICE);

投稿2020/02/17 05:34

okioki

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問