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

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

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

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1508閲覧

コンテンツプロバイダでローカルファイルを共有したい

harumi

総合スコア407

Android

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

Android Studio

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/10/26 08:50

目的としてはアプリAとアプリBでJsonのやり取りをしたいです
コンテンツプロバイダを使ってアプリAの持っているローカルのファイルをアプリBで呼び出したいと考えています。

アプリA内ではdata/data...にファイルを保存して、クリックでアプリBに遷移するようにしています。
ファイルが指定の場所の保存できていることが確認できたのでここは問題ないと思います。

アプリBのコードはこのようになっています。
cursorが取得できないため失敗のログが出力されます

log

1D/LOG: 処理開始 2E/ActivityThread: Failed to find provider info for アプリ名 3D/LOG: 処理終了

Kotlin

1class MainActivity : AppCompatActivity() { 2 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_main) 6 Log.d("LOG", "処理開始") 7 // val resolver = contentResolver 8 val uri: Uri? = Uri.parse("content://hogehoge.testApp/get/work_json") 9 uri?.let{uri -> 10 val cursor = this.contentResolver.query(uri, null, null, null, null) 11 cursor?.let { cursor -> 12 cursor.moveToFirst(); 13 var path = cursor.getString(cursor.getColumnIndex("value")) 14 cursor.close() 15 Log.d("LOG", path) 16 17 } 18 } 19 Log.d("LOG", "処理終了") 20 } 21}

xmlのパーミッションも設定済みです

xml

1 2 <uses-permission android:name="test.permission" />

アプリAのコンテンツプロバイダクラスはこのようになっています。
実装しているのはqueryの部分だけで、ローカルのファイルパスを取得してカーソルにセットして返しています。

Kotlin

1class WorkerContentProvider: ContentProvider() { 2 override fun getType(uri: Uri): String? { 3 TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 4 } 5 6 override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int { 7 TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 8 } 9 10 override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int { 11 TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 12 } 13 14 override fun onCreate(): Boolean { 15 return false 16 } 17 override fun query(uri: Uri, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?, sortOrder: String?): Cursor? { 18 val uri = Uri.parse(LocalFileData.path) 19 20 var file = File(LocalFileData.path) 21 22 val FROM:Array<String> = arrayOf("value") 23 val cursor:MatrixCursor = MatrixCursor(FROM) 24 val obj:Array<Any> = Any() as Array<Any> 25 obj[0] = file.toString() 26 27 cursor.addRow(obj) 28 return cursor 29 30 } 31 32 override fun insert(uri: Uri, values: ContentValues?): Uri? { 33 TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 34 } 35}

xml

1<uses-permission android:name="test.permission" /> 2 3<provider android:name=".WorkerContentProvider" android:authorities="com.test.contentprovider.myapp" android:enabled="true" android:exported="true" android:permission="test.permission" /> 4

コンテンツプロバイダの概念が難しくてよく理解てできていない状況で無理やり組んだのでどこがダメなのか全然わからずはまってしまっています。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問