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

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

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

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

Q&A

1回答

3174閲覧

Androidアプリで画像をfacebook・Twitter・LINE・Instagramにシェアしたい

yu01

総合スコア15

Android

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

0グッド

0クリップ

投稿2016/12/15 00:17

お世話になっております。
質問させて頂きます。

実現したいことは、タイトルの通りです。

AndroidManifest.xml

xml

1 <provider 2 android:name="android.support.v4.content.FileProvider" 3 android:authorities="com.example.app.fileprovider" 4 android:grantUriPermissions="true" 5 android:exported="false"> 6 <meta-data 7 android:name="android.support.FILE_PROVIDER_PATHS" 8 android:resource="@xml/filepaths" /> 9 </provider>

res/xml/filepaths.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<paths xmlns:android="http://schemas.android.com/apk/res/android"> 3 <cache-path name="shared_images/" path="images/"/> 4</paths>

java

1 public void shareWith(String appKeyword, String message) { 2 3 //スクリーンショットを取得 4 Bitmap bitmap = getScreenBitmap(getWindow().getDecorView()); 5 6 try { 7 8 File cachePath = new File(context.getCacheDir(), "images"); 9 cachePath.mkdirs(); // don't forget to make the directory 10 FileOutputStream stream = new FileOutputStream(cachePath + "/image.png"); // overwrites this image every time 11 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 12 stream.close(); 13 14 } catch (FileNotFoundException e) { 15 e.printStackTrace(); 16 } catch (IOException e) { 17 e.printStackTrace(); 18 } 19 20 File imagePath = new File(context.getCacheDir(), "images"); 21 File newFile = new File(imagePath, "image.png"); 22 Uri contentUri = FileProvider.getUriForFile(context, "com.example.app.fileprovider", newFile); 23 24 25 List<Intent> shareIntentList = new ArrayList<Intent>(); 26 //起動するインテントのリスト 27 List<ResolveInfo> resolveInfoList = 28 getPackageManager().queryIntentActivities( 29 new Intent(Intent.ACTION_SEND).setType("image/png"), 0); 30 //SNSアプリの一覧 31 for(ResolveInfo info : resolveInfoList){ 32 Intent shareIntent = new Intent(Intent.ACTION_SEND).setType( 33 "image/png"); 34 35 if(info.activityInfo.packageName.toLowerCase().contains(appKeyword)){ 36 shareIntent.putExtra(Intent.EXTRA_TEXT, message); 37 shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile( 38 new File(imagePath))); 39 shareIntent.setPackage(info.activityInfo.packageName); 40 shareIntentList.add(shareIntent); 41 } 42 } 43 44 //もし該当するアプリが1つでもあれば起動する 45 if(!shareIntentList.isEmpty()){ 46 47 48 Intent shareIntent = new Intent(); 49 shareIntent.setAction(Intent.ACTION_SEND); 50 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 51 shareIntent.setDataAndType(contentUri, getContentResolver().getType(contentUri)); 52 shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); 53 54 55 shareIntent.putExtra(Intent.EXTRA_STREAM, bitmap); 56 startActivity(Intent.createChooser(shareIntent, "Choose an app")); 57 58 } 59 } 60

と実装しているのですが、

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:560)

こういったエラーがでて落ちてしまいます。
解決策がわからず、、、調査している段階でした。

何かアドバイス等ご教示頂けると幸いです。
よろしくお願い致します。m(_ _)m

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

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

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

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

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

guest

回答1

0

cache-pathタグのname属性にスラッシュが入っていますが、これは関係ないですか?

投稿2016/12/15 06:31

yona

総合スコア18155

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

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

yu01

2016/12/15 08:21

コメントありがとうございます! shared_images/ 上記のスラッシュのことですかね? 削除してcleanしてbuildしてみましたが同様のエラーがでました、、、
yona

2016/12/15 11:55

プログラム上のどの処理でエラーが発生していますか?
yu01

2016/12/15 11:57

Uri contentUri = FileProvider.getUriForFile(context, "com.example.app.fileprovider", newFile); ここの部分です。
yona

2016/12/15 12:00

下記の2点を確認してください。 ・newFileはnullじゃないか。 ・File#existでファイルがあるか。
yu01

2016/12/21 09:33

反応が遅くなってしまい申し訳ございません。 2つをおこなったところ、 /data/data/com.example.app/cache/images/image.png true という結果が得られました。
yu01

2016/12/21 09:36

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference
yu01

2016/12/21 09:37

こんなエラーが吐き出されていました。
yu01

2016/12/26 06:29

>authoritiesが一致しているかもう一度確認してください。 こちら確認してみましたが、一致していましたね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問