1

私のアプリケーションは、ファイルが選択され、ファイルの処理方法を処理するためのアプリケーションの選択肢がユーザーに提示されると、Android PackageManager を呼び出します。この選択を Bluetooth に限定したいと思います。現在、Bluetooth が最初のオプションとして表示されますが、これは問題なく動作します。この単一のオプションのみをユーザーに提示できるかどうか疑問に思っていました。

    case REQUEST_FILE_SELECT:
        if (requestCode == REQUEST_FILE_SELECT) {
            // Get the Uri of the selected file
            Uri uri = data.getData();
            Log.d(TAG, "File Uri: " + uri.toString());
            // Get the path
            String path = null;
            try {
                path = FileUtils.getPath(this, uri);
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }
            Log.d(TAG, "File Path: " + path);
            // Get the file instance
            File mFile = new File(path);
            // Evoke the file chooser
            List<Intent> targetedShareIntents = new ArrayList<Intent>();
            Intent shareIntent = new Intent(
                    android.content.Intent.ACTION_SEND);
            shareIntent.setType("*/*");
            // Evoke the package manager
            List<ResolveInfo> resInfo = getPackageManager()
                    .queryIntentActivities(shareIntent,
                            PackageManager.GET_ACTIVITIES);
            if (!resInfo.isEmpty()) {

                for (ResolveInfo resolveInfo : resInfo) {
                    String packageName = resolveInfo.activityInfo.packageName;
                    if (packageName.equals("com.android.bluetooth")) {

                        Intent targetedShareIntent = new Intent(
                                android.content.Intent.ACTION_SEND);
                        shareIntent.putExtra(Intent.EXTRA_STREAM,
                                Uri.fromFile(mFile));
                        targetedShareIntent.setPackage(packageName);
                        targetedShareIntents.add(targetedShareIntent);
                        startActivity(Intent.createChooser(shareIntent,
                                "Share File"));

                    }

                }
            }
        }
4

1 に答える 1

1

解決策: デバイスが目的をサポートしているアプリを見つけ、bluetooh であるアプリを見つけて、直接呼び出します。

この記事はあなたの質問に答えます: http://tsicilian.wordpress.com/2012/11/06/bluetooth-data-transfer-with-android/

記事から: BT アプリケーションがこれらのハンドラーの中にあることがわかります。もちろん、ユーザーがそのアプリケーションをリストから選択して、それで完了できるようにすることもできます。しかし、もう少し使いやすくする必要があると感じた場合は、他の不要なオプションの中でアプリケーションを表示するだけでなく、さらに進んで自分でアプリケーションを起動する必要があります...しかし、どうすればよいでしょうか?

これを行う 1 つの方法は、Android の PackageManager を次のように使用することです。

//list of apps that can handle our intent
PackageManager pm = getPackageManager();
List appsList = pm.queryIntentActivities( intent, 0);

if(appsList.size() > 0 {
   // proceed
}

上記の PackageManager メソッドは、必要な情報をカプセル化する ResolveInfo オブジェクトのリストの形式で、ファイル転送インテントを処理する可能性のあるすべてのアクティビティの前に見たリストを返します。

//select bluetooth
String packageName = null;
String className = null;
boolean found = false;

for(ResolveInfo info: appsList){
  packageName = info.activityInfo.packageName;
  if( packageName.equals("com.android.bluetooth")){
     className = info.activityInfo.name;
     found = true;
     break;// found
  }
}

if(! found){

  Toast.makeText(this, R.string.blu_notfound_inlist,
  Toast.LENGTH_SHORT).show();
  // exit
}

これで、BT を自分で開始するために必要な情報が得られました。

//set our intent to launch Bluetooth
intent.setClassName(packageName, className);
startActivity(intent);

私たちが行ったことは、以前に取得したパッケージとそれに対応するクラスを使用することでした。私たちは好奇心旺盛なので、「com.android.bluetooth」パッケージのクラス名は何だろうと思うかもしれません。これを印刷すると、com.broadcom.bt.app.opp.OppLauncherActivity が得られます。OPP は Object Push Profile の略で、ワイヤレスでファイルを共有できる Android コンポーネントです。

この記事では、アプリケーションから Bluetooth を有効にする方法についても説明します。

于 2012-12-27T21:31:39.670 に答える