android開発をしていると、最近はLineと連携して欲しいという要望が増えてきました。
実装したので、以下にコードを記載します。
環境
- android4.0.2(sdk14)以上
私の場合、LineLogicというビジネスクラス用のクラスを用意しました。理由は、色々なacitivtyやfragmentで再利用したいからです。
androidとLineの連携で必要な機能は二つあります。
一つはLineのinstall有無を判断する機能。
もう一つはLineアプリにメッセージを投げるintentを取得する機能です。
以下、ソースコードです。
LineLogic.java
/**
* SNS選択のLine選択時に利用するビジネスロジック
*/
public class LineLogic {
protected Context mContext;
public LineLogic(Context context) {
super(context);
}
/**
* Lineがinstall済みかどうかを判断します。
* install済みの場合はtrue, installしていない場合はfalse
* @return
*/
public boolean isInstallLine() {
// パッケージマネージャを取得
PackageManager pm = mContext.getPackageManager();
// ランチャーから起動出来るアプリケーションの一覧を取得
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// 一覧の取得
List list = pm.queryIntentActivities(intent, 0);
if (list != null) {
for (ResolveInfo info : list) {
// アプリ名をログに出力
//Log.i("アプリ名", info.loadLabel(pm).toString());
// パッケージ名をログに出力
//Log.i("パッケージ名", info.activityInfo.packageName);
// パッケージ名に「"jp.naver.line.android"」が存在するか判定
if(info.activityInfo.packageName.equals("jp.naver.line.android")) {
return true;
}
}
}
return false;
}
/**
* Lineに送るintentを作成する
*/
public Intent getIntentSendLine(String msg) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("line://msg/text/" + msg));
return intent;
}
}
呼び出し側
MainActivity.java
LineLogic logic = new LineLogic(getApplicationContext());
// Lineインストール済み
if(logic.isInstallLine()) {
startActivity(logic.getIntentSendLine("test"));
// Line未インストール
} else {
// something
}
isInstallLineメソッドでラインがinstallされているかを判断し、getIntentSendLineメソッドでメッセージを作成したintentを取得します。
このintentを投げることで、Lineにメッセージを投稿することができます。
また、isInstallLineメソッドで判定しないと、Lineアプリが未インストール時にアプリが落ちてしまいます。
参考サイト
困っております(涙)。スマホにNAVER Media Playeyをインストールするだけのスペースがなかったので、アプリケーションを削除したり、SDカードに移したりして使用可能枠を確保できたので、無事インストールできました。ですが、その直後にLINEの名前をアプリケーションで見ると、jp.naver.line.androidに変わり、アイコンも緑色のアンドロイドに変わりました。スタート画面上にあるLINEをタップしても『電話にアプリケーションがインストールされていません。』とメッセージがでて起動しません。ほかのアプリも同様です。PCのLINEは使用できています。厚かましい事承知の上、解決策をご教授願います。宜しくお願いします。
返信削除